我的Gruntfile中有一个与此类似的jshint任务:
jshint: {
options: {
curly: true,
...
jquery: true,
globals: {
console: true,
Foo: true,
Bar: true
}
},
dev : ['Gruntfile.js', '<%= meta.jsDevFiles %>'],
build : {
options: {
globals: {Foo: true, Bar: true}
},
src: ['Gruntfile.js', '<%= meta.jsDevFiles %>']
}
}
将会有无限量的全局变量,我发现在开发方便的时候可以使用控制台,但是在构建期间不希望它可用。我可以将所有全局变量添加两次,但这样效率会非常低,容易出错。所以我导入了lodash并尝试了这个:
build: {
options: {
globals: '<% _.omit(jshint.options.globals, \'console\') %>'
},
...
}
理论上,应该从选项中删除控制台键,但它不适用于我。经过一些反复试验后,我发现这样可行:
build : {
options: {
globals: "<% jshint.build.options.globals = _.omit(jshint.options.globals, 'console'); %>"
},
...
}
关于这一点似乎是错误的,即使它正在发挥作用。有没有更好的方法去做我想做的事情?我工作的另一个版本是将globals选项存储为变量,然后在开发和构建任务中使用它,但是将选项与任务分开,并且为了更好地使用Grunt和模板,我很好奇如何让它发挥作用。
module.exports = function(grunt) {
var _ = require('lodash');
var jshintGlobs = {
console: true,
Foo: true,
Bar: true
}
jshint: {
options: {
...
globals: jshintGlobs
}
build: {
options: {
globals: _.omit(jshintGlobs, 'console');
}
}
}
}
答案 0 :(得分:0)
使用package.json文件存储全局变量:
devDependencies:
{
globals:
{
Foo: true,
Bar: true
}
}
然后在开发任务中引用它们:
var pkg = grunt.file.readJSON('package.json');
var consoleSetting = {"console":true};
var defaultGlobals = pkg.devDependencies.globals;
var devGlobals = (JSON.stringify(defaultGlobals) + JSON.stringify(consoleSetting)).replace("}{", ",");
grunt.initConfig
({
jshint: {options: { globals: JSON.parse(devGlobals) } },
build: {options: { globals: pkg.devDependencies.globals } }
})
<强>参考强>