我已經組織了我的任務像你的文件,但使用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上不起作用,因爲它按文件名順序(正如您指出的那樣)加載腳本。
請提供[最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)。 –