我有一个Grunt文件(Gruntfile.js
)来构建angularjs组件。我使用外部javascript文件(build.config.js
)来定义所需的文件和输出目录。
module.exports = {
build_dir: 'build',
app_files: {
src: ['src/**/*.js','!src/**/*.spec.js'],
//...
},
vendor_files: {
js: [ /* vendor files like jquery, bootstrap, etc... */ ]
}
}
我的Gruntfile.js就像这样调用它
module.exports = function(grunt) {
/* some code */
var userConfig = require('./build.config.js');
var taskConfig = {
pkg: grunt.file.readJSON("package.json"),
/* more code */
},
/* yet more code */
}
在我的package.json中,我为i18n指定了一个locale
变量,我可以在taskConfig
部分中使用'<%= pkg.locale %>'
部分。现在build.config.js
中指定了一些我需要加载的javascript文件,具体取决于指定的区域设置,但我不知道如何获取此变量,因为在build.config.js
中没有grunt
对象读取package.json
文件。因此,我无法在build.config.js
:
vendor_files: {
js: [ 'vendor/foo/bar.<%= pkg.locale %>.js' ]
如果不将build.config.js
中的所有内容放回Gruntfile.js
,我有什么办法可以实现这一目标吗?
答案 0 :(得分:0)
是。 Grunt模板只指向Grunt配置本身。
所以对于配置:
grunt.initConfig({
pkg: {
locale: 'en'
}
});
模板<%= pkg.locale %>
将等于字符串'en'
。
pkg: grunt.file.readJSON("package.json")
只需将您的package.json
文件作为javascript对象读取,然后分配给配置中的pkg
媒体资源。
您可以随意构建该配置对象,无论是声明性地,还是读取/解析JSON文件,还是require
导出javascript对象的其他脚本(如./build.config.js
所示)
在初始化配置后,还要考虑grunt.config('pkg.locale', 'en');
覆盖单个配置值:http://gruntjs.com/api/grunt.config