繁体   English   中英

node.js流中的控制流

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM