任務(wù)的動態(tài)加載機制(高級)

2018-11-15 17:51 更新

或許你已經(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);
});

其實就是加載當前目錄下所有以 task 開頭的文件,我們將各個 gulp 任務(wù)都定義成一個個以 task 開頭的 js 文件,這樣,就動態(tài)的注冊了所有 gulp 任務(wù),共用了一個 node_modules。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號