控制node.js流中的流

时间:2014-08-04 20:14:04

标签: javascript node.js stream gulp

我正在编写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()});

1 个答案:

答案 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“启动下一个任务”?使用回调使这更加明确,因此更容易推理。如果您不确定哪个先到,请使用回调...并确保您不返回任何内容。