我已将gulpfile.js
拆分为/gulp
文件夹中的多个文件,以便更好地整理代码。但是现在我想将变量debug (boolean)
传递给将切换gulp命令行为的文件(最终我将使用命令行参数,但是现在我只想让它与变量一起工作)
使用我在yeoman angular / gulp包中看到的方法,我使用了一个名为require-dir
的npm模块(它加载了/gulp
中的所有* .js文件。 1}}文件夹,其中每个文件夹都有一组设置的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
文件(按所需顺序)运行。
有人可以提供一些帮助吗?感谢
答案 0 :(得分:9)
正常的模块方式,真的。只需将gulp/build.js
文件更改为不实际将任何内容导出到正确的require-able模块:
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);
答案 1 :(得分:6)
Node.js提供了一个名为global
的全局变量,实际上,它是所有模块中的相同实例(与module
不同,每个模块都不同)。通过在global
上设置值,它们将变为真正的全球性。作为额外的奖励,您不需要使用global.
对全局变量进行前缀访问。只要您在范围内没有另一个名为global.foo
的变量,foo
和foo
都是等效的。
答案 2 :(得分:2)
我只是创建了一个包含所有变量的对象,我将其作为模块导出,因此我可以在所有任务文件中使用它。例如
<强> JS /任务/ variables.js 强>
<input type="date" /><input type="date" disabled>
<强> JS /任务/ sass.js 强>
module.exports = {
myBool: true
};
<强> JS /任务/ build.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;
});
<强> /gulpfile.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"
});