到目前为止,我对JS模块的理解是,
但是,在查看今天的gulp任务实现时,我感到很困惑,并且想要了解为什么gulp任务会在其他JS文件中声明/添加后添加。
以下是示例
项目/ a / a.js 文件
var gulp= require('gulp');
gulp.task('task:a', function(){
console.log('module:a task task:a executed')
});
module.exports = {
strA: "strA"
}
project / b / b.js 文件
var gulp= require('gulp');
gulp.task('task:b', function(){
console.log('module:b task task:b executed')
});
module.exports = {
strB: "strB"
}
project / gulpfile.js 文件
var gulp = require('gulp');
// require() called without using exported elements
require('./a/a.js');
require('./b/b.js');
gulp.task('task:in:gulpfile');
现在,如果您尝试在命令行中执行以下操作
cmd>gulp -T
op:
...
[--:10:07] ├── task:a
[--:10:07] ├── task:b
[--:10:07] └── task:in:gulpfile
cmd>gulp task:a
module:a task task:a executed
答案 0 :(得分:0)
那是因为gulp
是一个共享实例对象。当您在a.js
和b.js
中要求它时,gulpfile.js
需要它,在调用gulp
方法时会调用共享实例.task
。
如果你在这里查看源代码:https://github.com/gulpjs/gulp/blob/master/index.js#L63
你可以看到
var inst = new Gulp();
module.exports = inst;
您可以在此处详细了解:https://nodejs.org/api/modules.html
当您导出实例化对象时,该对象将按原样缓存。如果您使用相同的要求,您将获得相同的实例。