0

我有一个文件,testboot.js我想像这样注入导入语句:

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

请注意,import 语句是相对于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();
        });
});

但是永远不会调用“结束”处理程序。谁能帮我解决这个问题?谢谢你。

4

1 回答 1

1

您正在监听错误的事件。来自Node.js 文档Stream

和事件分别来自父级'finish'和类。该事件在被调用并且所有块都已被 处理后触发,在所有数据输出后触发,即在回调 in被调用之后。'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 回答