簡體   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