WeFlow-Hilfedokumentation
/ 任務(wù)的動態(tài)加載機(jī)制(高級)
任務(wù)的動態(tài)加載機(jī)制(高級)
或許你已經(jīng)發(fā)現(xiàn),tmt-workflow
所有項目只共享一份 node_modules
,所有的 task 也都是定義在 gulpfile.js
外的 _tasks
目錄下,其實現(xiàn)方式其實很簡單。
我們先看項目下面的 gulpfile.js
var gulp = require('gulp'); var fs = require('fs'); var path = require('path'); //注冊 var deep = 3; run_tasks('_tasks'); function run_tasks(tasks_path) { if (--deep < 0) { throw new Error('something wrong in require tasks!'); return; } tasks_path = path.join('../', tasks_path); if (fs.existsSync(tasks_path)) { require(tasks_path)(gulp); } else { run_tasks(tasks_path); } }
每一次執(zhí)行 gulp 任務(wù)時,會向上尋找 _tasks
目錄,這里定義的層級為 3,也就是在 gulpfile.js 會向上尋找 3 個層級,只要 _tasks
在這 3 個層級內(nèi)即可,如果你的目錄很深很深,改一下這里的 3 即可。
接著看 _tasks
目錄下的 index.js
:
fs.readdirSync(__dirname).filter(function (file) { return (file.indexOf(".") !== 0) && (file.indexOf('task') === 0); }).forEach(function (file) { var registerTask = require(path.join(__dirname, file)); registerTask(gulp, config); });
其實就是加載當(dāng)前目錄下所有以 task
開頭的文件,我們將各個 gulp 任務(wù)都定義成一個個以 task
開頭的 js 文件,這樣,就動態(tài)的注冊了所有 gulp 任務(wù),共用了一個 node_modules
。