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

时间:2014-07-27 04:07:04

标签: 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']);
});

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

但有时,也许随机,concat只会遗漏一个或多个文件。我正在编辑scriptB.js,例如保存,然后查看main.js,它只会scriptAscriptB和{{1} }。它完全遗漏了C和D.有时它可能只是C.有时它可能是D.有时它可能是A.它只是随机的。我没有对它遗漏的任何文件做任何事情。我在我的编辑器中打开了它,但它没有改变,只是坐在那里。 Gulp有时决定暂时将其遗漏掉。

我修复它的方法是简单地打开任何遗漏的脚本并在随机行或其他内容的末尾添加一个空格然后保存它,然后将scriptE连接起来像I'期待它。该文件没有任何问题。只需重新保存它。

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

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

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

1 个答案:

答案 0 :(得分: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' 

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

获得