gulp 使用与配置
1. 全局安装
1
| $ npm install --global gulp
|
2. 作为项目开发依赖(devDependencies)安装
1
| $ npm install --save-dev gulp
|
3. 在项目根目录下创建一个名为 gulpfile.js 的文件
1 2 3 4 5
| var gulp = require('gulp');
gulp.task('taskName', function() { // your task codes });
|
4. 基本概念
- src : 匹配输出源文件, 类型 string 或者 Array
- pipe : 处理管道, 可迭代
- dest : 写人目标文件, 类型string 或者Array
- watch: 监听, 类型string 或者Array
- cb : callback() 回调函数
- err : 错误对象
- event: event 对象
1 2 3 4 5 6 7
| gulp.task('minified', function() { //创建 task return gulp.src('./client/templates/*.jade') // 匹配源文件路径输出 .pipe(jade()) // 管道处理输出流 .pipe(gulp.dest('./build/templates')) // 写入目标文件 .pipe(minify()) .pipe(gulp.dest('./build/minified_templates')); }
|
5. 序列化执行task
官网说明:如果你想要创建一个序列化的task队列,并以特定的顺序执行,你需要做两件事:
- 给出一个提示,来告知 task 什么时候执行完毕,
- 并且再给出一个提示,来告知一个 task 依赖另一个 task 的完成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var gulp = require('gulp');
// 返回一个 callback,因此系统可以知道它什么时候完成 gulp.task('one', function(cb) { // 做一些事 -- 异步的或者其他的 cb(err); // 返回cb 有错误,则会停止后续操作,表示任务执行失败 });
// two 任务 依赖于 one 任务完成 gulp.task('two', ['one'], function() { // 'one' 完成后 });
gulp.task('default', ['one', 'two']);
|
6. cb(event) callback 传入event对象
1 2 3 4
| // 每次变动都会打印event数据 gulp.watch('js/**/*.js', function(event) { console.log('File ' + event.path + ' was ' + event.type + ', running tasks...'); });
|
7. gulp.watch(glob[, opts, cb])
监听文件变化,执行task
1 2 3 4 5 6 7 8 9 10 11 12
| // watch source/sass/*.scss and compile to css gulp.task('watch-scss', ['sass'], function() { gulp.watch("source/sass/*.scss", ['sass']); });
// compile scss to css gulp.task('sass', function() { return gulp.src("source/sass/*.scss") .pipe(sass()) .pipe(gulp.dest("source/css")) .pipe(reload({stream: true})); });
|
8. 执行gulp 命令
1 2 3 4 5 6 7 8 9
| $ gulp // gulp 默认执行 gulp.task('default', function() {}); $ gulp taskname // 指定执行的task
// 如果在一些脚手架的项目下无法执行gulp 命令,可以把gulp 命令添加到package.json 中使用 npm 执行 "scripts": { "watch": "gulp watch-scss" } // 在命令窗口执行 npm run-script 或者 npm watch $ npm run-script watch
|
examplegulpfile
var gulp = require('gulp');
var minifycss = require('gulp-minify-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');
var JSHint = require('gulp-jshint');
var browserSync = require('browser-sync').create();
var sass = require('gulp-sass');
var reload = browserSync.reload;
// js code check
gulp.task('js-hint', function(){
return gulp.src('./source/**/*.js')
.pipe(JSHint())
.pipe(JSHint.reporter('default'));
});
// compress public/**/*.css
gulp.task('minify-css', function() {
return gulp.src('./public/**/*.css')
.pipe(minifycss())
.pipe(gulp.dest('./public'));
});
// compress public/**/*.html
gulp.task('minify-html', function() {
return gulp.src('./public/**/*.html')
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
}))
.pipe(gulp.dest('./public'))
});
// compress public/**/*.js
gulp.task('minify-js', function() {
return gulp.src('./public/**/*.js')
.pipe(uglify())
.pipe(gulp.dest('./public'));
});
// watch public/**/*.js and on coding check (rules written into .jshintrc)
gulp.task('watch-js',function(){
gulp.watch('./source/**/*.js',['js-hint']);
})
// watch source/sass/*.scss and compile to css
gulp.task('watch-scss', ['sass'], function() {
gulp.watch("source/sass/*.scss", ['sass']);
});
// compile scss to css
gulp.task('sass', function() {
return gulp.src("source/sass/*.scss")
.pipe(sass())
.pipe(gulp.dest("source/css"))
.pipe(reload({stream: true}));
});
// execute default task by run command gulp
gulp.task('default', [
'minify-html', 'minify-css', 'minify-js', 'watch-js', 'watch-scss'
]);
参考[gulp官网][1]文档
[1]: https://www.gulpjs.com.cn/docs/api/