Mekanisme pemuatan dinamik tugas (lanjutan)
Mungkin anda telah mendapati bahawa semua projek dalam tmt-workflow
hanya berkongsi satu salinan node_modules
dan semua tugasan juga ditakrifkan dalam gulpfile.js
Dalam direktori _tasks
luaran, pelaksanaannya sebenarnya sangat mudah. tmt-workflow
所有项目只共享一份 node_modules
,所有的 task 也都是定义在 gulpfile.js
外的 _tasks
目录下,其实现方式其实很简单。
我们先看项目下面的 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); } }
每一次执行 gulp 任务时,会向上寻找 _tasks
目录,这里定义的层级为 3,也就是在 gulpfile.js 会向上寻找 3 个层级,只要 _tasks
在这 3 个层级内即可,如果你的目录很深很深,改一下这里的 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 任务都定义成一个个以 task
开头的 js 文件,这样,就动态的注册了所有 gulp 任务,共用了一个 node_modules
gulpfile.js
_tasks
Tahap yang ditakrifkan di sini ialah 3, iaitu Dalam gulpfile.js, ia akan mencari 3 peringkat, selagi _tasks
berada dalam 3 peringkat ini Jika direktori anda sangat mendalam, cuma tukar 3 di sini. 🎜🎜Kemudian lihat index.js
dalam direktori _tasks
:🎜rrreee🎜Malah, ia adalah untuk memuatkan semua fail bermula dengan task
dalam direktori semasa. Kami Mentakrifkan setiap tugas gulp sebagai fail js bermula dengan task
Dengan cara ini, semua tugas gulp didaftarkan secara dinamik dan berkongsi node_modules
. 🎜🎜