0

testboot.js次のように import ステートメントを挿入したいファイルがあります。

import "../app/app.spec";
import "../app/navbar/navbar.spec";

import ステートメントは に関連していることに注意してくださいtestboot.jsgulp を使用してこれを行うクリーンな方法を見つけるのに苦労しています。これが私の部分的な一口の仕事です:

gulp.task("inject", function (cb) {
    gulp
        .src("src/client/app/**/*.spec.js")
        .pipe(debug())
        .pipe(filenames("inject"))
        .on("end", function () {
            filenames.get("inject").map(function(e){
                // do something
            });
            util.log("in end"); // never called
            cb();
        });
});

しかし、「終了」ハンドラーは呼び出されません。誰でもこの問題で私を助けることができますか? ありがとうございました。

4

1 に答える 1

1

間違ったイベントをリッスンしています。のNode.js ドキュメントからStream:

'finish''end'イベントは、それぞれ親WritableReadableクラスからのものです。この'finish'イベントは、stream.end()が呼び出され、すべてのチャンクが によって処理された後に発生します。 はstream._transform()'end'のコールバックが呼び出された後、すべてのデータが出力された後に発生しますstream._flush()

つまり、'finish'イベントをリッスンする必要があります。

gulp.task("inject", function (cb) {
  gulp
    .src("src/client/app/**/*.spec.js")
    .pipe(debug())
    .pipe(filenames("inject"))
    .on("finish", function () {
        filenames.get("inject").map(function(e){
            // do something
        });
        util.log("in end");
        cb();
    });
});

または、コールバックstream._flush()が呼び出されることを確認する必要があります。たとえば、gulp.dest()次のようになります。

gulp.task("inject", function (cb) {
  gulp
    .src("src/client/app/**/*.spec.js")
    .pipe(debug())
    .pipe(filenames("inject"))
    .pipe(gulp.dest('dist'))
    .on("end", function () {
        filenames.get("inject").map(function(e){
            // do something
        });
        util.log("in end");
        cb();
    });
});
于 2016-03-06T11:11:13.687 に答える