Gulp Watch Concat有时会忽略一些JS文件

Jak*_*son 7 javascript gulp gulp-watch

我有一个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']);
});
Run Code Online (Sandbox Code Playgroud)

我认为很正常的设置.只要任何脚本发生更改,main.js就会通过按顺序连接脚本来创建脚本.它在99%的时间内都能正常工作.

但有时,也许是随机的,concat只是遗漏了一个或多个文件.我将编辑scriptB.js,例如,保存,然后看,main.js它只连接scriptA,scriptB并且scriptE.它完全省略了C和D.有时它可能只是C.有时它可能是D.有时它可能是A.它只是随机的.我没有对它遗漏的任何文件做任何事情.我在我的编辑器中打开了它,但它没有改变,只是坐在那里.Gulp有时决定暂时将其排除在外.

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

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

我注意到的一件事是,让我说我正在编辑scriptC并保存它,然后注意到scriptD了.如果我scriptC再次返回并保存它,scriptD仍然没有连接.我必须打开scriptD并保存它以强制它被包含回来main.js.所以一旦我看到问题弹出窗口,我通常可以以这种方式重新创建它.

这通常只发生在大约20次保存中.

sep*_*ott 2

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

main.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' 
Run Code Online (Sandbox Code Playgroud)

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']);
});
Run Code Online (Sandbox Code Playgroud)

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