Gulp 任务不等待上一个任务完成
Gulp task not waiting the completion of the previous task
我有一个 gulp 任务使用流来编写修改后的文件(使用 gulp-rev),另一个任务使用以前编写的清单文件替换 [=33= 中的变量] 文件。
我的第一个任务:
gulp.task('scripts', function() {
// other stuff...
var b = browserify(mainscript);
b.external('External')
.transform(babelify)
.bundle()
.pipe(source('app.js'))
.pipe(buffer())
.pipe(rev())
.pipe(gulp.dest(dest))
.pipe(rev.manifest({
path: 'appjs-manifest.json'
}))
.pipe(gulp.dest(dest))
}
上一个任务,将编写一个名为 'app-34f01b9d.js' 的文件和一个包含以下内容的清单文件 'appjs-manifest.json':
{
"app.js": "app-34f01b9d.js"
}
我的第二个任务,理论上应该等第一个任务完成再开始:
gulp.task('renameindex',['scripts'], function () {
var paths = gulp.paths;
var jsonContent = JSON.parse(fs.readFileSync(paths.buildDest+'/public/scripts/appjs-manifest.json', 'utf8'));
var src=paths.srcDir+"/index.hbs";
var appjs=jsonContent["app.js"];
console.log("app.js",appjs)
return gulp.src(src)
.pipe(handlebars({appjs:appjs}, null))
.pipe(rename('index.html'))
.pipe(gulp.dest(paths.buildDest));
});
任务应读取清单文件并将 "app-34f01b9d.js" 替换为生成文件 "index.html".
的车把模板中的变量 {appjs}}
发生的情况是 javascript 文件和清单文件写入正确,但是 第二个任务执行时没有等待清单文件被写入,因此抓取了错误的清单文件内容(前一次执行的)。
您的 scripts
任务没有 return 任何价值。当你不return任何东西时gulp无法知道任务何时完成,因此继续下一个任务。
简单说
gulp.task('scripts', function() {
// other stuff...
var b = browserify(mainscript);
return b.external('External')
...
如果您的任务正在做 gulp 管道以外的事情,您可以手动调用作为参数传递给任务的回调:
gulp.task('someTask', function(done) {
...
done();
}
我有一个 gulp 任务使用流来编写修改后的文件(使用 gulp-rev),另一个任务使用以前编写的清单文件替换 [=33= 中的变量] 文件。
我的第一个任务:
gulp.task('scripts', function() {
// other stuff...
var b = browserify(mainscript);
b.external('External')
.transform(babelify)
.bundle()
.pipe(source('app.js'))
.pipe(buffer())
.pipe(rev())
.pipe(gulp.dest(dest))
.pipe(rev.manifest({
path: 'appjs-manifest.json'
}))
.pipe(gulp.dest(dest))
}
上一个任务,将编写一个名为 'app-34f01b9d.js' 的文件和一个包含以下内容的清单文件 'appjs-manifest.json':
{
"app.js": "app-34f01b9d.js"
}
我的第二个任务,理论上应该等第一个任务完成再开始:
gulp.task('renameindex',['scripts'], function () {
var paths = gulp.paths;
var jsonContent = JSON.parse(fs.readFileSync(paths.buildDest+'/public/scripts/appjs-manifest.json', 'utf8'));
var src=paths.srcDir+"/index.hbs";
var appjs=jsonContent["app.js"];
console.log("app.js",appjs)
return gulp.src(src)
.pipe(handlebars({appjs:appjs}, null))
.pipe(rename('index.html'))
.pipe(gulp.dest(paths.buildDest));
});
任务应读取清单文件并将 "app-34f01b9d.js" 替换为生成文件 "index.html".
的车把模板中的变量 {appjs}}发生的情况是 javascript 文件和清单文件写入正确,但是 第二个任务执行时没有等待清单文件被写入,因此抓取了错误的清单文件内容(前一次执行的)。
您的 scripts
任务没有 return 任何价值。当你不return任何东西时gulp无法知道任务何时完成,因此继续下一个任务。
简单说
gulp.task('scripts', function() {
// other stuff...
var b = browserify(mainscript);
return b.external('External')
...
如果您的任务正在做 gulp 管道以外的事情,您可以手动调用作为参数传递给任务的回调:
gulp.task('someTask', function(done) {
...
done();
}