Node.js:我如何将全局variables传递给通过require()插入的文件?

我已经把我的gulpfile.js分成几个文件在一个/gulp gulpfile.js文件夹中,以便更好地组织代码。 但是现在我想将一个variablesdebug (boolean)传递给将会包含gulp命令的行为的文件(最终我将使用命令行参数,但现在我只想使它与variables一起工作)。

我使用的方法是使用我在一个yeoman angular / gulp包中看到的方法,它使用一个名为require-dir的npm模块(它将所有* .js文件加载到/gulp文件夹中,每个文件夹都有一个所设置的吞吐任务)。

gulpfile.js:

 var gulp = require('gulp'), run = require('run-sequence'), debug = true; require('require-dir')('./gulp'); gulp.task('default', ['build', 'server', 'watch', '...']); 

这将加载像…

吞掉/ build.js:

 var gulp = require('gulp'), plumber = require('gulp-plumber'), ...; gulp.task('build', function () { console.log(debug); }); 

所以当我运行命令gulp ,运行default任务时,它将加载build.js,然后执行build gulp任务。 但不幸的是,似乎debug返回undefined。

我怎么能得到这个工作?

我正在使用module.exports()和节点的require()方法,但我无法弄清楚如何获取包含文件中的gulp任务来声明,以便它可以从主gulpfile.js文件运行gulpfile.js文件(以所需的顺序)。

任何人可以提供一些援助? 谢谢

正常的模块方式,真的。 只要将gulp/build.js文件从实际导出到合适的需要模块中就可以了:

 module.exports = function(debug) { "use strict"; var gulp = require('gulp'), plumber = require('gulp-plumber'), ...; gulp.task('build', function () { console.log(debug); }); }; 

然后在你的主文件中调用它:

 ... var loadGulp = require('require-dir/gulp'); ... var debug = true; loadGulp(debug); 

Node.js提供了一个名为global全局variables,实际上,它是所有模块中的同一个实例(与每个模块中不同的module不同)。 通过设定global价值观,他们变得真正全球化。 作为一个额外的好处,你不需要全局的前缀访问全局variablesglobal. 。 只要你在范围内没有另外一个名为foovariables, global.foofoo就是等价的。

我只是创build一个包含所有variables的对象,作为一个模块导出,所以我可以在所有的任务文件中使用它。 例如

JS /任务/ variables.js

 module.exports = { myBool: true }; 

JS /任务/ sass.js

 var gulp = require('gulp'), $ = require('gulp-load-plugins')(), log = $.util.log, vars = require('./variables'); gulp.task('sass', function () { log('myBool: ' + vars.myBool); // logs "myBool: true" vars.myBool = false; }); 

JS /任务/ build.js

 var gulp = require('gulp'), $ = require('gulp-load-plugins')(), log = $.util.log, vars = require('./variables'); gulp.task('build', function () { log('myBool: ' + vars.myBool); // logs "myBool: false" }); 

/gulpfile.js

那么你可以从任何地方得到/设置这些variables:

 var gulp = require('gulp'), $ = require('gulp-load-plugins')(), runSequence = require('run-sequence'), vars = require('./js/tasks/variables'), requireDir = require('require-dir')('./js/tasks'); gulp.task('production', function(){ runSequence('sass', 'build'); });