我定义了以下 gulp-tasks。 他们应该修改静态文件并替换指向它们的链接。
var config = require('./config');
var gulp = require('gulp');
var rev = require('gulp-rev');
var revNapkin = require('gulp-rev-napkin');
var revReplace = require('gulp-rev-replace');
var runSequence = require('run-sequence');
var manifest_src = gulp.src('./' + config.base.dest + '/manifest.json');
var revStatic = function() {
return gulp.src([config.base.dest + '/**/*', '!' + config.base.dest + '/**/*+(css|js|json|html)'])
.pipe(rev())
.pipe(gulp.dest(config.base.dest))
.pipe(revNapkin({verbose: false}))
.pipe(rev.manifest(config.base.dest + '/manifest.json', {merge: true}))
.pipe(gulp.dest(''));
}
var revUpdateRef = function() {
return gulp.src(config.base.dest + '/**/**.{css,js}')
.pipe(revReplace({manifest: manifest_src}))
.pipe(gulp.dest(config.base.dest));
}
var revCSSJS = function() {
return gulp.src(config.base.dest + '/**/*.{css,js}')
.pipe(rev())
.pipe(gulp.dest(config.base.dest))
.pipe(revNapkin({verbose: false}))
.pipe(rev.manifest(config.base.dest + '/manifest.json', {merge: true}))
.pipe(gulp.dest(''));
}
var revUpdateHTML = function() {
return gulp.src(config.base.dest + '/**/*.html')
.pipe(revReplace({manifest: manifest_src}))
.pipe(gulp.dest(config.base.dest));
}
var revTask = function(cb) {
runSequence('rev:static', 'rev:updateRef', 'rev:cssjs', 'rev:updateHTML', cb)
}
gulp.task('rev:static', revStatic);
module.exports = revStatic;
gulp.task('rev:updateRef', revUpdateRef);
module.exports = revUpdateRef;
gulp.task('rev:cssjs', revCSSJS);
module.exports = revCSSJS;
gulp.task('rev:updateHTML', revUpdateHTML);
module.exports = revUpdateHTML;
gulp.task('rev', revTask);
module.exports = revTask;
如果我手动运行彼此的任务,一切都很好。但是,如果我运行由运行序列运行的所有 rev 任务组成的任务“rev”,则最后一个任务“rev:updateHTML”未完成。
我的控制台输出是这样的
~/working/gulp-workflow/$gulp rev
[14:33:41] Using gulpfile ~/working/gulp-workflow/gulpfile.js
[14:33:41] Starting 'rev'...
[14:33:41] Starting 'rev:static'...
[14:33:41] Finished 'rev:static' after 204 ms
[14:33:41] Starting 'rev:updateRef'...
[14:33:41] Finished 'rev:updateRef' after 38 ms
[14:33:41] Starting 'rev:cssjs'...
[14:33:41] Finished 'rev:cssjs' after 26 ms
[14:33:41] Starting 'rev:updateHTML'...
~/working/gulp-workflow/$
我在我的任务中找不到任何错误,但我猜流运行异步时有错误。 希望您能帮助我并指出我的错误。
最佳答案
如果我没有完全错的话,gulp 不会识别任务是否已经完成。因此,您可以使用 done
作为参数,并在管道完成时执行它。所以实际上是这样的:
var revUpdateHTML = function(done) {
return gulp.src(config.base.dest + '/**/*.html')
.pipe(revReplace({manifest: manifest_src}))
.pipe(gulp.dest(config.base.dest))
.on('end', function() {
done();
});
}
关于javascript - gulp-run-sequence 没有完成任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34022079/