如何从不同文件中添加Gulp任务持续存在

时间:2017-02-17 18:16:54

标签: javascript node.js gulp

到目前为止,我对JS模块的理解是,

  1. 除非函数,对象等不从JS模块导出 无用且模块中没有代码被执行(除了直接调用ex: console.log(),somefunction(),如果其他模块的requir()也是如此。
  2. 所以总是让模块导出 东西。
  3. 每次要求(' moduleName')都会调用新对象
  4. 功能,在一个模块中声明的变量无法从其他模块访问 模块(除非导出)
  5. 但是,在查看今天的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
    

1 个答案:

答案 0 :(得分:0)

那是因为gulp是一个共享实例对象。当您在a.jsb.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

当您导出实例化对象时,该对象将按原样缓存。如果您使用相同的要求,您将获得相同的实例。