7

我有一个 Gulp concat watch 任务设置来连接一些 JS 文件:

var sources = [
  'public/js/scriptA.js',
  'public/js/scriptB.js',
  'public/js/scriptC.js',
  'public/js/scriptD.js',
  'public/js/scriptE.js'
];

gulp.task('main.js', function(){
    return gulp.src(sources)
        .pipe(concat('main.js'))
        .pipe(gulp.dest('./public/js'));
});

gulp.task('watch', function() {
    gulp.watch(sources, ['main.js']);
});

我认为很正常的设置。每当任何脚本更改时,main.js都会通过按该顺序连接脚本来创建。它在 99% 的时间里都能正常工作。

但有时,可能是随机的,concat 只是遗漏了 1 个或多个文件。例如,我将进行编辑scriptB.js,保存它,然后查看main.js它并仅连接scriptA,scriptBscriptE. 它完全忽略了 C 和 D。有时它可能只是 C。有时它可能是 D。有时它可能是 A。它只是随机的。我没有对它遗漏的任何文件做任何事情。我在我的编辑器中打开了它,但它没有改变,只是坐在那里。Gulp 有时只是出于某种随机原因决定将其排除在外。

我修复它的方法是简单地打开任何遗漏的脚本并在随机行或其他内容的末尾添加一个空格,然后保存它,然后main.js像我期望的那样连接它。该文件没有任何问题。只好重新保存了。

这是任何人都知道的一个突出的错误吗?我无法在任何地方找到有关此错误的任何信息。我可以做些什么来调试或记录此问题以弄清楚如何重新创建它?

我确实注意到的一件事是,假设我正在编辑scriptC并保存它,然后通知scriptD丢失了。如果我返回scriptC并再次保存它,scriptD仍然没有连接。我必须打开scriptD并保存它以强制将其包含回main.js. 因此,一旦我看到问题弹出窗口,我通常可以以这种方式重新创建它。

这通常只发生大约 20 次保存中的 1 次。

4

1 回答 1

2

您可以使用 gulp-include 插件来解决问题。使用此插件,您可以通过在 main.js 文件中使用特殊注释来包含/要求您的 js 文件。

主.js:

//=require 'public/js/scriptA.js' 
//=require 'public/js/scriptB.js' 
//=require 'public/js/scriptC.js' 
//=require 'public/js/scriptD.js' 
//=require 'public/js/scriptE.js' 

gulpfile.js:

var gulp          = require("gulp"),
    include       = require("gulp-include");

gulp.task("scripts", function() { 

    gulp.src("main.js")
        .pipe(include())
            .on('error', console.log)
        .pipe(gulp.dest("./public/js"));

});

gulp.task('watch', function() {
    gulp.watch(sources, ['main.js']);
});

该插件可通过 npm 获得:https ://www.npmjs.com/package/gulp-include

于 2016-04-03T12:27:45.393 回答