关于升级仍是不升级,这是一个哲学问题。javascript
gulp4的语法更加现代,支持ES6的大部分写法,使用exports的方式去暴露任务组合,更加灵活和便捷。css
gulp4同时也提供了不少强大的API,例如parallel()和series()。此外,gulp4再也不支持同步任务,因此能够看到编写任务的时候也再也不推荐使用.task()方法去编写,而是独立定义一个函数方法,而后用return去返回一个回调函数的结果。例如一个处理的css的任务,定义以下。html
function minHeaderCss() { // 这是一个回调函数的返回对象,自己也是异步的 return src([ './static/css/header.css', './static/css/boot.css', './static/css/wrap.css', './static/css/feedback.css', './static/css/pronemove.css' ]) .pipe(minCss()) .pipe(concat('main_header.min.css')) .pipe(dest('./static/css/min/')); }
parallel()是并行执行多个任务(task),一个任务的错误将整个任务组合都结束,可是其余并行的任务可能执行完,也可能执行完。
series()是顺序执行,任何一个任务出错,全部后续任务都中止,有点单线程的感受。
这两个方法均可以从gulp里面得到,以下。java
const { series, parallel } = require('gulp');
只须要将须要执行的任务添加到series()或者parallel()里面便可:gulp
const { series, parallel } = require('gulp'); function javascript(cb) { // body omitted cb(); } function css(cb) { // body omitted cb(); } exports.build = series(javascript, css); exports.buildParallel = parallel(javascript, css)
若是想执行build任务组合,那么在命令行中执行以下语句:babel
gulp build
至于使用哪一种方式,仍是要是否构建过程很漫长。若是构建的步骤多,任务重,时间又长,确定有限考虑使用parallel()来并行构建任务组合。
不一样的任务组合还能够进行二次组合,能够对一些适合顺序执行的任务使用series(),对一些适合并行的任务使用parallel()。例如一些须要babel编译的Sass和js的任务使用parallel(),一个比较完整的构建脚本以下所示:app
const {src, dest, watch, series, parallel, connect} = require('gulp'); const babel=require('gulp-babel'); const revAll = require('gulp-rev-all'); const cssver = require('gulp-make-css-url-version'); const del = require('del'); const htmlmin = require('gulp-htmlmin'); // 可使用ES6 => 语法来编写任务 const babelCss = () => src(['./css/**/*.css']) .pipe(cssver()) .pipe(cleancss({compatibility: 'ie7', format: 'keep-breaks', keepSpecialComments :'*'})) .pipe(dest('./dist/css/')) .pipe(connect.reload()); function babelJs() { return src(['./js/**/*.js']) .pipe(babel({presets: ['@babel/env']})) .pipe(uglify({ mangle:true, compress:true}) .pipe(dest('./dist/js/')) .pipe(revAll.manifestFile()) .pipe(dest('./dist/rev/')); } function clean() { return del('./dist'); } function babelHtml() { return src(['./app/tpl/*.html']) .pipe(htmlmin({ removeComments: true, collapseWhitespace: true })) .pipe(dest('./dist/html/')); } // 嵌套使用series和parallel export.build = exports.build = series(clean,parallel(babelJs, babelCss),babelHtml);
这仍是一个简易的构建脚本,还缺乏一个watch,监听项目中css、js、html文件的变化,一旦发生变化就触发对应的方法。gulp服务一直运行着,实时刷新。
我我的认为,若是是长期维护的项目,仍是能够考虑拥抱gulp4,毕竟Gulp4的强大,是真香!异步