带有“require”函数和传递参数的Gruntfile.js

时间:2013-09-28 02:50:23

标签: javascript angularjs internationalization gruntjs

我有一个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,我有什么办法可以实现这一目标吗?

1 个答案:

答案 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