0

我有一个 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 中,我指定了一个locale用于 i18n 目的的变量,我可以在该taskConfig部分中使用,方法是将其放在'<%= pkg.locale %>'. 现在指定了一些javascript文件build.config.js,我需要根据指定的语言环境加载,但我不知道如何获取这个变量,因为build.config.js没有grunt对象可以读取package.json文件。因此,我不能做这样的事情build.config.js

vendor_files: {
    js: [ 'vendor/foo/bar.<%= pkg.locale %>.js' ]

有没有什么办法可以在不把所有东西都放build.config.js回去的情况下做到这一点Gruntfile.js

4

1 回答 1

1

Yes. Grunt templates just point to the Grunt config itself.

So for the config:

grunt.initConfig({
  pkg: {
    locale: 'en'
  }
});

A template <%= pkg.locale %> will equal the string 'en'.

pkg: grunt.file.readJSON("package.json") just reads your package.json file as javascript object and assigns to the pkg property in your config.

You're free to build that config object however you wish, either declaratively, read/parse JSON files, or require other scripts which export a javascript object (as what ./build.config.js appears to do).

Also consider grunt.config('pkg.locale', 'en'); for overriding single config values after you have init your config: http://gruntjs.com/api/grunt.config

于 2013-09-29T18:39:48.543 回答