1. ホーム
  2. ノード

gulp エラー。タスク関数を指定する必要があります

2022-02-10 20:58:56
<パス

案内

実行する gulp task_name は、次のようなメッセージでエラーを報告します。

assert.js:350
    throw err;
    ^

AssertionError [ERR_ASSERTION]: Task function must be specified
    at Gulp.set [as _setTask] (D:\me\gulp\gulp-test\node_modules\[email protected]@undertaker\lib\set-task.js:10:3)
    at Gulp.task (D:\me\gulp\gulp-test\node_modules\[email protected]@undertaker\lib\task.js:13:8)
    at Object.<anonymous> (D:\me\gulp\gulp-test\gulpfile.js:11:6)
    at Module._compile (internal/modules/cjs/loader.js:689:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
    at Module.load (internal/modules/cjs/loader.js:599:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
    at Function.Module._load (internal/modules/cjs/loader.js:530:3)
    at Module.require (internal/modules/cjs/loader.js:637:17)
    at require (internal/modules/cjs/helpers.js:22:18)


原因を分析する

  • gulpのバージョン4へのアップグレードにより、バージョン4とバージョン3の実行方法に若干の違いが生じる
  • 連続したタスクリストを処理する際に series() メソッドを使用します。
	const { series } = require('gulp');
	
	function javascript(cb) {
	  // body omitted
	  cb();
	}
	
	function css(cb) {
	  // body omitted
	  cb();
	}
	
	exports.build = series(javascript, css);


比較する gulp3 gulp4

Gulp3では、順番に実行したい(Bが始まる前にAが終了し、Cが始まる前にBが終了することを確認する)タスクA、B、Cのリストがある場合、次のようなコードになります。

gulp.task('a', function () {
  // Do something.
});
gulp.task('b', ['a'], function () {
  // Do some stuff.
});
gulp.task('c', ['b'], function () {
    // Do some more stuff.
});


Gulp 4では、このようなことはもうできません。これからは gulp.series gulp.parallel のように、gulpタスクは2つの引数しか持たなくなりました。

gulp.series : 順番に実行する
gulp.paralle 並列計算が可能

gulp.task('my-tasks', gulp.series('a', 'b', 'c', function() {
  // Do something after a, b, and c are finished.
}));

gulp.task('build', gulp.parallel('styles', 'scripts', 'images', function () {
  // Build the website.
}));


gulp.task('my-tasks', gulp.series('a', gulp.parallel('styles', 'scripts', 'images'), 'b', 'c', function() {
  // Do something after a, b, and c are finished.
}));


あるいは、次のように使うこともできる。

gulp.task('my-tasks', gulp.series('a', gulp.parallel('styles', 'scripts', 'images'), 'b', 'c', function() {
  // Do something after a, b, and c are finished.
}));