gulp вводит относительные пути к файлам

У меня есть файл testboot.js, в который я хочу вставить операторы импорта, например:

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

Обратите внимание, что оператор импорта относится к testboot.js. У меня возникли проблемы с определением чистого способа сделать это с помощью gulp. Вот моя задача частичного глотка:

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();
        });
});

Но обработчик "конец" никогда не вызывается. Может ли кто-нибудь помочь мне с этой проблемой? Спасибо.


person zero_dev    schedule 06.03.2016    source источник


Ответы (1)


Вы слушаете не то событие. Из документации Node.js по Stream:

События 'finish' и 'end' относятся к родительским классам Writable и Readable соответственно. Событие '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();
    });
});
person Sven Schoenung    schedule 06.03.2016