7

いくつかの JS ファイルを連結するための Gulp concat ウォッチ タスクのセットアップがあります。

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% の確率で正常に動作します。

しかし、場合によっては、おそらくランダムに、連結によって 1 つ以上のファイルが除外されることがあります。scriptB.jsたとえば、編集して保存してから、 、およびmain.jsのみを連結して確認します。C と D を完全に除外しました。C だけの場合もあれば、D の場合もあれば、A の場合もあります。ランダムです。除外されたファイルには何もしませんでした。エディターで開いていますが、変更されておらず、ただそこに座っています。Gulp は、ランダムな理由でそれを除外することがあります。scriptAscriptBscriptE

私がそれを修正する方法は、省略されたスクリプトを開き、ランダムな行または何かの最後にスペースを追加して保存することです。その後、main.js期待どおりに連結されます。ファイルに問題はありませんでした。保存し直すしかありませんでした。

これは誰の知る限りでも未解決のバグですか? このバグに関する情報はどこにも見つかりませんでした。この問題をデバッグまたはログに記録して、再現方法を見つけるためにできることはありますか?

私が気づいたことの 1 つは、編集scriptCして保存したとしましょう。その後、通知scriptDがありませんでした。に戻っscriptCて再度保存すると、scriptDまだ連結されていません。scriptD強制的にmain.js. したがって、問題のポップアップが表示されたら、通常はこの方法で再現できます。

通常、これは 20 回の保存で約 1 回しか発生しません。

4

1 に答える 1

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

于 2016-04-03T12:27:45.393 に答える