我正在编写gulp.js任务,将我的javascripts连接/ uglify到app.min.js,然后当它完成时,我想将app.min.js注入我的索引中的脚本标记。玉文件。
所以我在编写下一个任务,却不知道node.js如何控制流程的工作......(我对promises更好)。
gulp.task('js-prod', function () {
return gulp.src(['js/main.js', 'js/**/*.js', 'dist/templates.js', '!js/**/*.spec.js'])
.pipe(sourcemaps.init())
.pipe(concat('app.min.js'))
.pipe(gulp.dest('dist'))
.pipe(ngAnnotate())
.pipe(uglify({mangle: false}))
.pipe(rename('app.min.js'))
.pipe(sourcemaps.write())
.pipe(gulp.dest('dist'))
.on('end', function () {
var target = gulp.src('./index.jade');
var sources = gulp.src(['dist/app.min.js'], {read: false});
return target.pipe(inject(sources)).pipe(gulp.dest('./'));
});
});
似乎有效,但这是正确的方法吗? gulp.js会采取正确的异步提示吗?来自'结束的那个'事件吗 我承诺它将是 - >
return startBuildPromise().then(function(){return (injectFileScript()});
答案 0 :(得分:2)
试试这个:
gulp.task('js-prod', function (cb) {
gulp.src(['js/main.js', 'js/**/*.js', 'dist/templates.js', '!js/**/*.spec.js'])
.pipe(sourcemaps.init())
.pipe(concat('app.min.js'))
.pipe(gulp.dest('dist'))
.pipe(ngAnnotate())
.pipe(uglify({mangle: false}))
.pipe(rename('app.min.js'))
.pipe(sourcemaps.write())
.pipe(gulp.dest('dist'))
.on('end', function () {
var target = gulp.src('./index.jade');
var sources = gulp.src(['dist/app.min.js'], {read: false});
target.pipe(inject(sources))
.pipe(gulp.dest('./'))
on('end', cb);
});
});
});
请注意,只要on('end')事件发生,gulp就会立即运行。现在我们有一个不清楚的场景,因为有两件事正在聆听('结束')。 target.pipe(inject).pipe(dest)应该先运行还是gulp“启动下一个任务”?使用回调使这更加明确,因此更容易推理。如果您不确定哪个先到,请使用回调...并确保您不返回任何内容。