tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【gulp】gulp@4.0.0にしたら`AssertionError [ERR_ASSERTION]: Task function must be specified`と怒られる

はじめに

とあることで、gulpを3.x.x.から^4.0.0にあげる必要がありました。
f:id:tweeeety:20180618044056p:plain

あげてからgulpタスクを実行すると
以下のようなエラーが出たのでその対応方法をメモ

# defaultタスクを実行するとこんなエラーが...
$ ./node_modules/gulp/bin/gulp.js
assert.js:42
  throw new errors.AssertionError({
  ^

AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (/Users/tweeeety/gulp-task-gulp4.0.0-sample1/node_modules/undertaker/lib/set-task.js:10:3)
    at Gulp.task (/Users/tweeeety/gulp-task-gulp4.0.0-sample1/node_modules/undertaker/lib/task.js:13:8)
    at Object.<anonymous> (/Users/tweeeety/gulp-task-gulp4.0.0-sample1/gulpfile.js:5:6)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
    at Module.require (module.js:596:17)
    at require (internal/module.js:11:18)

なぜ起こったか

removed 3 argument syntax for gulp.task  
gulp changelog

github/gulpのchangelogから抜粋ですが、
3.x.xのときのgulp.taskは引数が3つでしたが、
^4.0.0ではgulp.taskの引数が2つになりました。

これによるエラーのようです。

どうすればいいか

gulp.task@3.x.x -> gulp.task@^4.x.x
に書き換える変える一例をあげます。

gulp.task@3.x.x

gulp.task('hoge', 'fuga', function() {
  console.log('callbackの関数');
});

gulp.task@^4.x.x

// 引数は2つに
gulp.task('hoge', gulp.series('fuga', function(callback) {
  console.log('callbackの関数');
  // callback or streamを返さなければならない
  callback();
}));

補足

例はgulp.seriesで書きましたが

直列にしたいか、並列にしたいかで

  • gulp.series
    • 直列にしたいタスクを定義
  • gulp.parallel
    • 並列にしたいタスクを定義

を適宜読み替えてください。

参考サイトを載せておきます。

3.9.1^4.x.xを実際に動かして見比べてみる

そのまま試せる形でgithubに載せてみました。

https://github.com/tweeeety/gulp-task-gulp4.0.0-sample1

  • gulp@3.x.xの書き方
  • gulp@^4.x.xの書き方

をそれぞれ記載しています。

補足

上記のコード例を実行すると
微妙にtaskの呼び出しに変化があります。

Starting 'default'Starting 'task2'あたりの順番が違います。

今回の例でいうと
両者は実質タスク名なだけで中身は何もしてないので影響はないですが
念のため注意が必要そうです。

3.9.1の例
$ ./node_modules/gulp/bin/gulp.js
[00:26:33] Using gulpfile ~/gitrepos/hatena/gulp-task-gulp4.0.0-sample1/gulpfile.js
[00:26:33] Starting 'task1'...
i am task1!!
[00:26:33] Finished 'task1' after 138 μs
[00:26:33] Starting 'task2-1'...
i am task2-1!!
[00:26:33] Finished 'task2-1' after 65 μs
[00:26:33] Starting 'task2-2'...
i am task2-2!!
[00:26:33] Finished 'task2-2' after 82 μs
[00:26:33] Starting 'task2'...
i am task2!!
[00:26:33] Finished 'task2' after 77 μs
[00:26:33] Starting 'task3'...
i am task3!!
[00:26:33] Finished 'task3' after 75 μs
[00:26:33] Starting 'default'...
[00:26:33] Finished 'default' after 19 μs
[~/gitrepos/hatena/gulp-task-gulp4.0.0-sample1 00:26:3
^4.x.xの例
$ ./node_modules/gulp/bin/gulp.js
[00:31:37] Using gulpfile ~/gitrepos/hatena/gulp-task-gulp4.0.0-sample1/gulpfile.js
[00:31:37] Starting 'default'...
[00:31:37] Starting 'task1'...
i am task1!!
[00:31:37] Finished 'task1' after 878 μs
[00:31:37] Starting 'task2'...
[00:31:37] Starting 'task2-1'...
[00:31:37] Starting '<anonymous>'...
i am task2-1!!
[00:31:37] Finished '<anonymous>' after 247 μs
[00:31:37] Finished 'task2-1' after 481 μs
[00:31:37] Starting 'task2-2'...
i am task2-2!!
[00:31:37] Finished 'task2-2' after 240 μs
[00:31:37] Starting '<anonymous>'...
i am task2!!
[00:31:37] Finished '<anonymous>' after 219 μs
[00:31:37] Finished 'task2' after 1.4 ms
[00:31:37] Starting 'task3'...
i am task3!!
[00:31:37] Finished 'task3' after 174 μs
[00:31:37] Finished 'default' after 5.27 ms

こちらも

こちらも合わせてご覧ください

おわり

gulpを3.x.x->4.x.xからあげる場合は
書き直しになる場合が多いかもしれないので要注意
\(^o^)/