私は自分のタスクをあなたのようなファイルに整理しましたが、ES6 インポート/エクスポートを使用しています。
例: 私はクリーン、スクリプト、および gulpfile.babel.js のタスクを実行しました。内容は次のとおりです
tasks/clean.js
。
import promisedDel from 'promised-del';
let cleanTaskCreator = (config) => {
let task = (done) => {
return promisedDel((typeof config.path === 'string' ? [config.dest] : config.dest));
};
task.displayName = 'clean:' + config.name;
task.description = 'clean task for ' + config.name;
return task;
};
export default cleanTaskCreator;
tasks/scripts.js
:
import gulp from 'gulp';
import named from 'vinyl-named';
import webpack from 'webpack-stream';
import {scripts as config} from '../config.js';
import clean from "./clean";
let scripts = () => {
return gulp.src(config.entries)
.pipe(named())
.pipe(webpack(config.webpackConfig))
.pipe(gulp.dest(config.dest));
};
scripts.displayName = 'scripts';
scripts.description = 'generation of scripts assets';
if(process.env.NODE_ENV !== 'production') {
let realScripts = scripts;
scripts = gulp.series(clean(config), realScripts);
scripts.displayName = 'clean&scripts';
scripts.description = 'clean scripts and ' + scripts.description;
}
export default scripts;
そして最後にgulpfile.babel.js
:
import * as gulp from "gulp"
import scripts from "./gulp/tasks/scripts";
gulp.task(scripts);
let defaultTask = gulp.series(scripts);
defaultTask.displayName = 'default';
defaultTask.description = 'default';
gulp.task(defaultTask);
すべてのタスクは、実行される関数を公開し、そのすべての依存関係を内部的に定義します (タスク スクリプトでわかるように、運用環境の場合は、世代の前にアセットをクリーンアップします)。次に、メイン ファイルで、これらの関数のみをインポートし、メイン タスク (クラシック デフォルト) とコマンド ラインから到達可能なその他のタスクを定義します。
これが gulp4 を使用してプロジェクト (大小を問わず) を整理するのに最適なモード (または正しいモード) であるかどうかはわかりませんが、私にとってはこのレイアウトで問題ありません。
最後に、gulp-load-subtasks のようなモジュールは gulp4 では機能しません。これは、(指摘したように) ファイル名順にスクリプトをロードするためです。