2016-10-18 9 views
6

私は4にガルプ3からのアップグレードだ、と私はエラーに実行している:gulp-concatとlazypipeのこの組み合わせでは、gulp 4を使用してエラーが発生していますか?

The following tasks did not complete: build 
Did you forget to signal async completion? 

は、私はそれが言っているのか理解が、このコードは、それをトリガーされる理由を理解することはできません。

エラーが発生した場合、タスクは完了します(ファイルは連結され、destに書き込まれます)。 lazypipeなしで同じコードを実行するとエラーは発生せず、lazypipe内の連結を削除するとエラーも修正されます。

ストリームを作成するもの(マージストリームなど)に全体をラップすると、問題が修正されます。私は、gulp-concatとlazypipeとの間の相互作用が、ストリームが正しく返されるのを妨げていると思います。

gulp.task('build', function() { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
     .pipe(plugins.concat, 'cat.js') // Task will complete if I remove this 
     .pipe(gulp.dest, dest); 

    // This works 
    // return gulp.src(src('js/**/*.js')) 
    //  .pipe(plugins.concat('cat.js')) 
    //  .pipe(gulp.dest(dest)); 

    // This doesn't (unless you wrap it in a stream-making function) 
    return gulp.src(src('js/**/*.js')) 
     .pipe(buildFiles()); 
}); 

何かアドバイスは感謝:ここ

は(簡体字)仕事です!

答えて

7

lazypipeとgulp 4を使用した場合、これはknown issueであり、近い将来修正される予定はありません。私の知る限り、この問題は4はそのストリームのサポートについて言うためにこれを持っているasync-doneを使用しています飲み込むという事実によって引き起こされる言うことができるように

OverZealous commented on 20 Dec 2015
As of now, I have no intention of making lazypipe work on Gulp 4.

Note: Only actual streams are supported, not faux-streams; Therefore, modules like event-stream are not supported.

あなたが使用することを問題からの引用lazypipe()最後のパイプとして取得するのは、gulpでストリームを扱うときに通常持つ多くのプロパティを持たないストリームです。あなたは、ストリームをロギングすることで、自分自身のためにこれを見ることができます:

// console output shows lots of properties 
console.log(gulp.src(src('js/**/*.js')) 
    .pipe(plugins.concat('cat.js')) 
    .pipe(gulp.dest(dest))); 

// console output shows much fewer properties 
console.log(gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles())); 

これはおそらく、一口が第二の流れは、「フェイク・ストリーム」であることを考慮し、ストリームが終了したときに、正しく検出されない理由です。

この時点で唯一の選択肢は回避策です。 (任意の追加パッケージを必要としない)最も簡単な回避策は、ちょうどあなたのタスクにコールバック関数cbを追加し、'end'イベントをリッスンすることです:

gulp.task('build', function(cb) { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
    .pipe(plugins.concat, 'cat.js') 
    .pipe(gulp.dest, dest); 

    gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles()) 
    .on('end', cb); 
}); 

また、buildFiles()後に任意の.pipe()を追加することでも、この問題を解決する必要があります実際に何もしないものgutil.noop()

var gutil = require('gulp-util'); 

gulp.task('build', function() { 
    var dest = 'build'; 

    var buildFiles = lazypipe() 
    .pipe(plugins.concat, 'cat.js') 
    .pipe(gulp.dest, dest); 

    return gulp.src(src('js/**/*.js')) 
    .pipe(buildFiles()) 
    .pipe(gutil.noop()); 
}); 
+0

わかりやすく詳細な説明をいただきありがとうございます。 – goodforenergy

関連する問題