我希望下面的gulp调用一个接一个地同步运行。但他们不遵守命令。
run-sequence节点模块在这里没有帮助,因为我没有尝试串行运行gulp任务(即它的语法类似于gulp.task("mytask", ["foo", "bar", "baz"]
等),而是gulp“调用“串联,如下所示。
gulp.task("dostuff", function (callback) {
gulp
.src("...")
.pipe(gulp.dest("...");
gulp
.src("...")
.pipe(gulp.dest("...");
gulp
.src("...")
.pipe(gulp.dest("...");
callback();
});
如何让它们一个接一个地运行?
答案 0 :(得分:8)
您可以使用 async 作为调用的控制流,仅将其置于一项任务中,同时避免您获得“金字塔效果”。所以这样的事情应该对你的用例有好处:
var async = require('async');
gulp.task('yeah', function (cb) {
async.series([
function (next) {
gulp.src('...')
.pipe(gulp.dest('...')
.on('end', next);
},
function (next) {
gulp.src('...')
.pipe(gulp.dest('...')
.on('end', next);
},
function (next) {
gulp.src('...')
.pipe(gulp.dest('...')
.on('end', next);
}
], cb);
});
这也将允许您进行一些错误处理,并在发生问题时更好地定位目标。
答案 1 :(得分:3)
嗯,这只是流,所以你可以听终结事件(注意厄运的金字塔!)
gulp.task("dostuff", function (callback) {
gulp
.src("...")
.pipe(gulp.dest("..."))
.on('end', function () {
gulp
.src("...")
.pipe(gulp.dest("..."))
.on('end', function () {
gulp
.src("...")
.pipe(gulp.dest("..."))
.on('end', callback);
});
});
});
但它可能是一个更好的模式,可以将它分解为多个任务,每个任务都依赖于前一个任务。
答案 2 :(得分:2)
run-sequence:
按指定顺序运行一系列gulp任务。这个功能 旨在解决您已定义运行顺序的情况, 但是选择不使用或不能使用依赖项。
npm install --save-dev run-sequence
// runSequence will ensure this task will run the following tasks in the listed order
gulp.task('things-to-do', callback => runSequence(
'clean-up-workspace', // clean up before copying new files
'copy-new-files', // wait till copy-new-files done before linting
'lint', // wait till lint is done before running minify
'minify', // wait till minify is done before starting laundry and dinner
['do-laundry', // do laundry and cook dinner at the same time
'cook-dinner'],
'bath-cat', // don't bath the cat till both laundry and dinner are done
callback
));
答案 3 :(得分:0)
然后返回gulp.src的结果:
gulp.task('render', function() {
var appJsFiles = _.map(glob.sync('src/**/*.js'), function(f) {
return f.slice(6);
});
// Render the file.
return gulp.src('src/template.html')
.pipe(template({
scripts: appJsFiles,
styles: ['style1.css', 'style2.css', 'style3.css']
}))
.pipe(gulp.dest(config.build_dir));
});
答案 4 :(得分:0)
你可以在最后一个管道之后添加这样的东西
.pipe(gulp.dest(FINAL_DEST))
.on('end', () => gulp.src(['build']) .pipe(clean()))