2016-07-13 4 views
0

を返されたものの、私は信号非同期完了エラーIが流れ

Did you forget to signal async completion?

を得ている理由を私は理解することはできません。ここに私の設定です:スタックトレースによると

gulp.task('compile-ts',() => { 
    return tsProject.src(config.files.src.ts) 
     .pipe($.tap((file, t) => { 
      logVerbose('Compiling "' + file.path + "'"); 
     })) 
     .pipe($.sourcemaps.init()) 
     .pipe($.typescript(tsProject)) 
     .pipe($.sourcemaps.write('./')) 
     .pipe($.chmod(755)) 
     .pipe(gulp.dest(config.dist)); 
}); 

gulp.task('copy-assets',() => { 
    return gulp.src(config.files.src.css_html_js, { base: config.src }) 
     .pipe($.tap((file, t) => { 
      logVerbose('Copying "' + getFileName(file.path) + "'"); 
     })) 
     .pipe($.chmod(755)) 
     .pipe(gulp.dest(config.dist)); 
}); 

gulp.task('browser-sync', (done) => { 
    browserSync.init({ 
     "port": 3000, 
     "startPath": "dist/index.html", 
     "browser": "chrome", 
     "logLevel": "silent", 
     "server": { 
      "middleware": { 
       "0": null 
      } 
     } 
    }, done); 
    process.on('exit',() => { 
     browserSync.exit(); 
    }); 
}) 

gulp.task('watch', gulp.parallel(() => { 
    gulp.watch(config.files.ts, gulp.series('compile-ts')); 
},() => { 
    gulp.watch(config.files.css_html_js, gulp.series('copy-assets')); 
})); 

gulp.task('serve-dist', gulp.parallel('watch', 'browser-sync')); 

、問題の行があります

gulp.watch(config.files.ts, gulp.series('compile-ts')); 

watchタスク内。タスクcompile-tsが動作していて、完了を知らせるのに十分なはずのストリームを返します。しかし、なぜ私はエラーをとらえているのですか?

これは[email protected]です。

EDIT:

gulp.task('watch', (done) => { 
    gulp.watch(config.files.css_html_js, gulp.series('copy-assets')); 
    gulp.watch(config.files.ts, gulp.series('compile-ts')); 
    done(); 
}); 

watchタスクを変更する私はもうすべてのエラーを得ることはありませんが、タスクは4msの内に終了し、全く何もしませんさ。 done部分を削除すると、同じエラーが再び表示されます。

EDIT2:私は両方

gulp.task('watch-ts',() => { 
    return gulp.watch(config.files.ts, gulp.series('compile-ts')); 
}); 

gulp.task('watch-assets',() => { 
    return gulp.watch(config.files.css_html_js, gulp.series('copy-assets')); 
}); 

gulp.task('watch', gulp.parallel('watch-ts', 'watch-assets')); 

watch-tswatch-assets、問題を特定くれというエラーメッセージを出すことができるようにいくつかのより多くのタスクを分割。いずれにしても、私が知る限りストリームが返されます。

+0

可能な重複[がぶ飲みエラー:次の作業は完了しませんでした:あなたは非同期完了を通知することを忘れていましたか?](HTTP別の方法としては、ignoreInitial optionそれが最初の起動時に時計をトリガーするgulp.watch()に渡すことができます://stackoverflow.com/questions/36897877/gulp-error-the-following-tasks-did-not-complete-did-you-forget-to-signal-async) –

+0

また、 'tsProject.src() 'ストリームを返しますか? ['gulp.watch()'](https://github.com/gulpjs/gulp/blob/4.0/docs/API.md#gulpwatchglobs-opts-fn)には、文字列または文字列が必要です。 –

+0

修正済み。回答は変更されません。質問を投稿する前に提案された回答をチェックしています。私の意見では、私はストリーム(=あなたの回答項目1)を返しています。 –

答えて

1

いつもは、のすべてのタスクを構成する関数で非同期完了を通知する必要があります。非同期的な人だけではありません。ストリームを使用する人だけではありません。関数でストリームを返さない場合は、何らかの形で非同期補完を通知する必要があります(通常はコールバックを呼び出す)。

だからあなたの最初の編集はすでに正しかった:ここにコールバックを呼び出す

gulp.task('watch', (done) => { 
    gulp.watch(config.files.css_html_js, gulp.series('copy-assets')); 
    gulp.watch(config.files.ts, gulp.series('compile-ts')); 
    done(); 
}); 

は一気があなたのwatchタスクが正常に完了したことを知っていることを確認します。この場合、「正常に完了しました」とは、タスクが2つの時計を開始したことを意味します。両方の時計は、watchの仕事が終了した後も引き続き実行されます。したがって、watchタスクが4ms後に終了するという事実に何も問題はありません。

ただし、時計を起動すると、ではなく、が自動的にリスナー機能の実行をトリガーします。まず監視ファイルの1つを変更する必要があります。

gulp.task('watch', (done) => { 
    gulp.watch(config.files.css_html_js, {ignoreInitial:false}, gulp.series('copy-assets')); 
    gulp.watch(config.files.ts, {ignoreInitial:false}, gulp.series('compile-ts')); 
    done(); 
}); 
+0

これを指摘してくれてありがとう、Sven、それは今働いている。実際に何もしていないので何もしなかったと私は言った。よく見ると、たとえば次のように表示されます。 'compile-ts'タスクはglobの' config.files.src.ts'を参照し、これを時計と落雷のglob varと比較します。だから実際にはグロブは未定義で、エラーメッセージは誤解を招いていました。 –

関連する問題