控制node.jsstream中的stream

我写了一个gulp.js任务,连接/ uglify我的javascript到app.min.js,然后当它完成时,我想注入app.min.js到我的index.jade文件中的脚本标记。

所以我正在写下一个任务,不知道node.js控制stream如何工作…(我用Promise更好)。

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采取正确的asynchronous提示? 从“结束”事件? 我承诺这将是 – >

 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就会运行。 现在我们有一个不清楚的情景,有两件事情正在听('结束')。 target.pipe(inject).pipe(dest)是否应该先运行,或者是吞下“启动下一个任务”? 使用callback使得这更加明确,因此更容易推理。 如果您不确定哪一个先到,请使用callback…并确保您什么都不返回。