运行-sequence 没有 运行 gulp 任务的顺序
run-sequence doesn't run gulp tasks in order
我的 Gulp 文件中有 3 个任务必须按以下顺序 运行:
clean
(删除 /dist
文件夹中的所有内容)
copy
(复制多个文件到/dist
文件夹)
replace
(替换/dist
文件夹中部分文件中的部分字符串)
我已经阅读了所有其他帖子,我已经尝试 "run-sequence" 但它不起作用,因为 "replace" 任务不是 运行 最后。我对 "callback" 的使用感到困惑。 运行 任务单独工作正常。
var gulp = require('gulp');
var runSequence = require('run-sequence');
gulp.task('runEverything', function(callback) {
runSequence('clean',
'copy',
'replace',
callback);
});
gulp.task('clean', function () {
return del(
'dist/**/*'
);
});
gulp.task('copy', function() {
gulp.src('node_modules/bootstrap/dist/**/*')
.pipe(gulp.dest('dist/vendor'))
//...
return gulp.src(['index.html', '404.html', '.htaccess'])
.pipe(gulp.dest('dist/'));
});
gulp.task('replace', function(){
gulp.src(['dist/index.php', 'dist/info.php'])
.pipe(replace('fakedomain.com', 'realdomain.com'))
.pipe(gulp.dest('dist'));
return gulp.src(['dist/config.php'])
.pipe(replace('foo', 'bar'))
.pipe(gulp.dest('dist'));
});
使用这 3 个任务的完整示例将不胜感激。谢谢。
run-sequence
documentation关于异步操作的任务有以下说法:
make sure they either return a stream or promise, or handle the callback
您的 copy
和 replace
任务都有多个流。您必须 return 所有 流,而不仅仅是最后一个流。如果您不 return 其他流,Gulp 将一无所知,因此不会等待它们完成。
由于您只能 return 一个流,因此您必须合并这些流 [在此处插入捉鬼敢死队参考]。这将为您提供一个合并流,您可以从任务中 return。
以下是使用 merge-stream
package 的方法:
var merge = require('merge-stream');
gulp.task('copy', function() {
var stream1 = gulp.src('node_modules/bootstrap/dist/**/*')
.pipe(gulp.dest('dist/vendor'))
//...
var stream2 = gulp.src(['index.html', '404.html', '.htaccess'])
.pipe(gulp.dest('dist/'));
return merge(stream1, stream2);
});
gulp.task('replace', function(){
var stream1 = gulp.src(['dist/index.php', 'dist/info.php'])
.pipe(replace('fakedomain.com', 'realdomain.com'))
.pipe(gulp.dest('dist'));
var stream2 = gulp.src(['dist/config.php'])
.pipe(replace('foo', 'bar'))
.pipe(gulp.dest('dist'));
return merge(stream1, stream2);
});
我的 Gulp 文件中有 3 个任务必须按以下顺序 运行:
clean
(删除/dist
文件夹中的所有内容)copy
(复制多个文件到/dist
文件夹)replace
(替换/dist
文件夹中部分文件中的部分字符串)
我已经阅读了所有其他帖子,我已经尝试 "run-sequence" 但它不起作用,因为 "replace" 任务不是 运行 最后。我对 "callback" 的使用感到困惑。 运行 任务单独工作正常。
var gulp = require('gulp');
var runSequence = require('run-sequence');
gulp.task('runEverything', function(callback) {
runSequence('clean',
'copy',
'replace',
callback);
});
gulp.task('clean', function () {
return del(
'dist/**/*'
);
});
gulp.task('copy', function() {
gulp.src('node_modules/bootstrap/dist/**/*')
.pipe(gulp.dest('dist/vendor'))
//...
return gulp.src(['index.html', '404.html', '.htaccess'])
.pipe(gulp.dest('dist/'));
});
gulp.task('replace', function(){
gulp.src(['dist/index.php', 'dist/info.php'])
.pipe(replace('fakedomain.com', 'realdomain.com'))
.pipe(gulp.dest('dist'));
return gulp.src(['dist/config.php'])
.pipe(replace('foo', 'bar'))
.pipe(gulp.dest('dist'));
});
使用这 3 个任务的完整示例将不胜感激。谢谢。
run-sequence
documentation关于异步操作的任务有以下说法:
make sure they either return a stream or promise, or handle the callback
您的 copy
和 replace
任务都有多个流。您必须 return 所有 流,而不仅仅是最后一个流。如果您不 return 其他流,Gulp 将一无所知,因此不会等待它们完成。
由于您只能 return 一个流,因此您必须合并这些流 [在此处插入捉鬼敢死队参考]。这将为您提供一个合并流,您可以从任务中 return。
以下是使用 merge-stream
package 的方法:
var merge = require('merge-stream');
gulp.task('copy', function() {
var stream1 = gulp.src('node_modules/bootstrap/dist/**/*')
.pipe(gulp.dest('dist/vendor'))
//...
var stream2 = gulp.src(['index.html', '404.html', '.htaccess'])
.pipe(gulp.dest('dist/'));
return merge(stream1, stream2);
});
gulp.task('replace', function(){
var stream1 = gulp.src(['dist/index.php', 'dist/info.php'])
.pipe(replace('fakedomain.com', 'realdomain.com'))
.pipe(gulp.dest('dist'));
var stream2 = gulp.src(['dist/config.php'])
.pipe(replace('foo', 'bar'))
.pipe(gulp.dest('dist'));
return merge(stream1, stream2);
});