2017-02-17 32 views
0

到目前爲止,我的理解關於JS模塊中添加,如何咕嘟咕嘟任務從不同的文件中堅持

  1. 除非功能,對象等,不從JS模塊導出其 無用的,在模塊沒有代碼被執行(除了直接調用ex: console.log(),somefunction(),如果其requir()由其他模塊編輯)。
  2. 所以總是讓模塊導出 的東西。
  3. 此外,每次需要(「模塊名」)被稱爲新的對象返回
  4. 功能,在一個模塊內聲明的變量與其他 模塊無法訪問(除非出口)

但是看着一個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" 
} 

項目/ B/b.js文件

var gulp= require('gulp'); 
gulp.task('task:b', function(){ 
    console.log('module:b task task:b executed') 
}); 
module.exports = { 
    strB: "strB" 
} 

項目/ 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

這是因爲gulp是一個共享實例對象以下。當您在a.jsb.js中要求它時,因爲gulpfile.js需要它,所以當調用.task方法時將調用共享實例gulp

如果你看看源代碼在這裏:https://github.com/gulpjs/gulp/blob/master/index.js#L63

你可以看到,

var inst = new Gulp(); 
module.exports = inst; 

你可以閱讀更多有關在這裏:https://nodejs.org/api/modules.html

當您導出一個實例化的對象差不多該對象被緩存在需要的狀態。如果你要使用相同的要求,你會得到同樣的實例。