私はGulp 4タスクを定義したいと思います.Gulp 4タスクは、直列に実行される3つの関数の構成です。しかし、私はむしろgulp.task()
を使用するよりも名前の関数として定義したい:Gulp 4:関数内でgulp.series()とgulp.parallel()を使用するにはどうすればよいですか?
export function test() {
return gulp.series(beforeTest, coreTest, afterTest);
}
:
function beforeTest() { ... }
function coreTest() { ... }
function afterTest() { ... }
export function test() {
// what goes here?
// this function should be equivalent to:
// gulp.task('test', gulp.series(beforeTest, coreTest, afterTest));
}
私は同様のquestionはOPは次の同等のものを試してみましたガルプのGitHubのイシュートラッカーに尋ねました
これが動作しない理由は、GitHubの問題で説明されています。ガルプチームからの推奨されるソリューションは、名前の関数を使用するのではなく、変数への複合機能を割り当てることがありませんでした:
export const test = gulp.series(beforeTest, coreTest, afterTest);
しかし、この解決策はいくつかの理由のために欠損表示されます。
最初の欠乏はがぶ飲み4タスク名、その内のタスクの順序でこの場所(私はすでに名前の関数の代わりに、gulp.task()
を使用して避けるようにしようとしていた何かによる新しいrequirementに制限についてGitHubの問題にcommentで育ちました参照する前に登録する必要があります)。
2番目の欠点は、より美容的です(したがって、私のOCDを引き起こします:-))。
gulp.task('build', gulp.parallel(lint, test));
その後、私は実行するとgulp build
、私のような、test
を参照する別の複合タスクを持っている場合、
[00:00:00] Starting 'test'...
[00:00:00] Starting 'beforeTest'...
[00:00:00] Finished 'beforeTest' after 106 ms
[00:00:00] Starting 'coreTest'...
[00:00:00] Finished 'coreTest' after 214 ms
[00:00:00] Starting 'afterTest'...
[00:00:00] Finished 'afterTest' after 280 μs
[00:00:00] Finished 'test' after 324 ms
しかし:gulp test
を実行している場合は、複合test
タスクが出力に表示されます複合test
タスクは出力に表示されません:
[00:00:00] Starting 'build'...
[00:00:00] Starting 'lint'...
[00:00:00] Starting 'beforeTest'...
[00:00:01] Finished 'beforeTest' after 1.08 s
[00:00:01] Starting 'coreTest'...
[00:00:02] Finished 'coreTest' after 977 ms
[00:00:02] Starting 'afterTest'...
[00:00:02] Finished 'afterTest' after 232 μs
[00:00:07] Finished 'lint' after 6.96 s
[00:00:07] Finished 'build' after 6.96 s
私は疑わしい彼はGulpがseries
またはparallel
という名前の関数を表示しないためかもしれません。
export const test = gulp.series(beforeTest, coreTest, afterTest);
test.displayName = 'test';
しかし、それはgulp build
の出力を変更しなかった:GitHubの問題で提案されているように私は、test.displayName
を設定してみました。私はまた、test.name
を設定しようとしたが、そのプロパティはフリーズすることが表示されます。
TypeError: Cannot assign to read only property 'name' of function 'function series(done) {
nowAndLater.mapSeries(args, asyncDone, extensions, done);
}'
私が名前の関数として複合test
タスクを定義することができれば、それはこれらの欠点の両方に取り組むだろうと思われます。したがって、要約すると、この質問の先頭に表示されているtest
関数の本文をどのように定義しますか?