タスクには非同期コードが含まれている可能性があるため、タスクの実行が終了したときにgulpに信号を送る必要があります(=「非同期完了」)。
Gulp 3.xでは、これを行わなくても回避できます。非同期完了を明示的に通知しなかった場合、gulpはタスクが同期であり、タスク関数が戻るとすぐに完了すると想定します。Gulp 4.xはこの点でより厳密です。タスクの完了を明示的に通知する必要があります。
それには6つの方法があります。
何かを印刷するだけの場合、これは実際にはオプションではありませんが、通常gulpストリームで作業しているため、おそらく最も頻繁に使用される非同期完了メカニズムです。これは、ユースケースで使用するための(かなり考案された)例です。
var print = require('gulp-print');
gulp.task('message', function() {
return gulp.src('package.json')
.pipe(print(function() { return 'HTTP Server Started'; }));
});
ここで重要な部分はreturn
ステートメントです。ストリームを返さないと、gulpはストリームがいつ終了したかを判断できません。
これは、ユースケースにより適したメカニズムです。ほとんどのPromise
場合、自分でオブジェクトを作成する必要はありません。通常、オブジェクトはパッケージによって提供されます(たとえば、頻繁に使用されるdel
パッケージはを返しますPromise
)。
gulp.task('message', function() {
return new Promise(function(resolve, reject) {
console.log("HTTP Server Started");
resolve();
});
});
async / await構文を使用すると、これをさらに簡略化できます。マークされたすべての関数はasync
暗黙的にPromiseを返すため、以下も機能します(node.jsバージョンがサポートしている場合)。
gulp.task('message', async function() {
console.log("HTTP Server Started");
});
3.コールバック関数を呼び出す
これは、おそらくあなたのユースケースで最も簡単な方法です。gulpは、最初の引数としてコールバック関数をタスクに自動的に渡します。完了したら、その関数を呼び出すだけです。
gulp.task('message', function(done) {
console.log("HTTP Server Started");
done();
});
これは、使用可能なnode.jsラッパーがないため、コマンドラインツールを直接呼び出す必要がある場合に、ほとんどの場合に役立ちます。それはあなたのユースケースで機能しますが、明らかに私はそれをお勧めしません(特に、あまり移植性がないため):
var spawn = require('child_process').spawn;
gulp.task('message', function() {
return spawn('echo', ['HTTP', 'Server', 'Started'], { stdio: 'inherit' });
});
私はこのメカニズムを使用したことがありませんが、RxJSを使用している場合は便利かもしれません。何かを印刷したいだけの場合は、やり過ぎです。
var of = require('rxjs').of;
gulp.task('message', function() {
var o = of('HTTP Server Started');
o.subscribe(function(msg) { console.log(msg); });
return o;
});
前のものと同様に、完全を期すためにこれを含めていますがEventEmitter
、何らかの理由ですでにを使用している場合を除いて、これは実際に使用するものではありません。
gulp.task('message3', function() {
var e = new EventEmitter();
e.on('msg', function(msg) { console.log(msg); });
setTimeout(() => { e.emit('msg', 'HTTP Server Started'); e.emit('finish'); });
return e;
});
webpack-stream
。:この使用github.com/shama/webpack-stream/issues/...