// gulpfile.js gulp.task('foo', function() { gulp.src(glob) .pipe(...) .pipe(...) .pipe(gulp.dest(...)) .pipe(...) .pipe(gulp.dest(...)) }); // shell $ gulp foo
gulp.src(glob[, options])
css
根据 glob
匹配文件,返回 stream
,能够经过 .pipe()
方法传递给后续的插件。html
gulp.dest(path[, options])
node
通常用法 .pipe(gulp.dest(path))
,把 pipe
中的内容按照指定的 path
写成文件,会自动建立不存在的文件夹。git
注意,能够经过 .pipe
屡次指定输出的地方,具体请看 这里github
gulp.task(name[, deps], fn)
shell
定义名为 name
的任务,定义以后就能够在命令行中使用 gulp xxx
来执行任务。gulp
deps
里面的任务所有完成后才会执行 fn
api
deps
里面的任务都是并行执行的,若是须要顺序执行,须要特殊写法。具体看 这里promise
gulp.watch(glob[, opts, cb])
sass
监听文件变化
不会监听新文件(目录),因此通常你会须要 gulp-watch
# for development mode gulp server # run test gulp test # for production mode gulp build
gulp server
流程把 less
, sass
, 之类的文件编译成 CSS,经常使用插件:
建立 Web Server (with Live Reload),经常使用:
gulp-connect,用来建立 Web Server,其实还有其余选择的,但多数都是利用 connect 来建立 Web Server 的。
node-proxy-middle,用来代理请求,能够把 /api/xxx
发送到指定的地址。(经常使用于 SPA 开发)
connect-modrewrite,匹配资源,若是不匹配就能够重定向到指定地址。(经常使用于 SPA 开发)
connect-history-api-fallback,做用同上,也用于匹配资源,但用起来简单不少。(经常使用于 SPA 开发)
监听文件变化,经常使用插件:
gulp.task('clean:css', function () { del.sync('app/styles/*.css'); }); gulp.task('less', ['clean:css'], function () { var stream = gulp .src('app/styles/main.less') .pipe(less()) .pipe(gulp.dest('app/styles/')); return stream; }); gulp.task('connect', function () { connect.server({ root: './app', port: 9000, livereload: true, middleware: function (connect, o) { return [ (function () { var url = require('url'); var proxy = require('proxy-middleware'); var options = url.parse('http://localhost:3000/api'); options.route = '/api'; return proxy(options); })(), modRewrite([ '!\\.html|\\.js|\\.css|\\.swf|\\.jp(e?)g|\\.png|\\.gif|\\.eot|\\.woff|\\.ttf|\\.svg$ /index.html' ]) ]; } }); }); gulp.task('watch', function () { gulp .src('app/styles/**/*.less', {read: false}) .pipe(watch('app/styles/**/*.less', function () { return gulp .src('app/styles/main.less') .pipe(less()) .pipe(gulp.dest('app/styles/')) .pipe(connect.reload()); })); gulp .src(['app/scripts/**/*.js', 'app/**/*.html']) .pipe(watch(['app/scripts/**/*.js', 'app/**/*.html'])) .pipe(plumber()) .pipe(connect.reload()); }); gulp.task('server', ['less', 'connect', 'watch']);
gulp build
流程清理 dist/
文件夹
del,根据 glob
来删除文件/目录
压缩文件
gulp-htmlmin,压缩 html
文件
gulp-cssmin,压缩 css
文件
gulp-minify-css,同上,封装了 clean-css,star 比上面的多
gulp-uglify,混淆 JavaScript
代码
gulp-usemin,合并指定 block
中的文件
gulp-rev,给静态文件加上版本号,如 app.js
-> app-d41d8cd98f.js
复制其余文件到 dist/
gulp.src(...).pipe(gulp.dest(...))
gulp.task('clean:build', function () { del.sync('dist/', {force: true}); }); gulp.task('minify', ['clean:build', 'less'], function () { gulp .src('app/views/**/*.html') .pipe(htmlmin({collapseWhitespace: true})) .pipe(gulp.dest('dist/views')); gulp .src('app/index.html') .pipe(usemin({ js: [uglify(), rev()], css: [minifyCss(), 'concat', rev()] })) .pipe(gulp.dest('dist/')); }); gulp.task('copyfonts', function () { gulp .src('app/styles/fonts/*') .pipe(gulp.dest('dist/fonts/')); }); gulp.task('build', ['clean:build', 'minify', 'copyfonts']);
https://scarletsky.github.io/2015/08/14/use-gulp-for-front-end-workflow/