[英]Control flow in node.js streams
我正在写一个gulp.js任务,将我的JavaScript合并/丑化到app.min.js中,然后在完成时,我想将app.min.js注入index.jade文件中的脚本标签中。
所以我在写下一个任务时,并没有真正知道node.js的控制流程是如何工作的……(我对诺言更好)。
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()});
尝试这个:
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);
});
});
});
请注意,gulp将在on('end')事件发生后立即运行。 现在我们有一个不清楚的场景,因为有两件事正在监听on('end')。 应该首先运行target.pipe(inject).pipe(dest)还是gulp的“启动下一个任务”? 使用回调使此操作更明确,从而更易于推理。 如果您不确定哪一个先出现,请使用回调...并确保不返回任何内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.