通过grunt.template在任务配置中使用grunt.option

时间:2015-07-08 16:26:32

标签: javascript gruntjs

简单地说一下这个问题,我正在寻找一种方法来传递命令行参数,类似于以下内容,可以在我的任务配置文件中使用。

$ grunt mytask --site=abcd

要详细说明我的设置,我使用的是load-grunt-config,因此我的 /Gruntfile.js 文件只包含以下内容......

module.exports = function (grunt) {
   "use strict";
   require("load-grunt-config")(grunt);
};

然后我有一个 / grunt 文件夹,其中包含 /grunt/compass.js /grunt/aliases.js 等文件, /grunt/watch.js 等,其中每个文件都是该任务的配置。以下是我的 /grunt/watch.js 文件的示例:

module.exports = {
    compass: {
        files: ['ui/scss/**/*.scss'],
        tasks: ['compass:local']
    }
};

现在,我想做的是以下内容。我想使用grunt.template类型格式来输入从命令行传入的值。它不必是grunt.option格式,因为我可以读取其他地方的值并将其分配给变量/ config / etc,但我无法找出任何方法来获取该命令行选项进入我的配置设置。

module.exports = {
    compass: {
        files: ['ui/scss/*<%= grunt.option("site") %>*.scss'],
        tasks: ['compass:local']
    }
};
  

我的基本问题是我无法弄清楚如何使上面的&lt;%= grunt.option(&#34; site&#34;)%&gt; 代码生效。 (或类似的东西,可能&lt;%= grunt.config.site%&gt;

/Gruntfile.js 中,我可以通过以下内容阅读该选项...

module.exports = function (grunt) {
   "use strict";
   grunt.log.writeln(grunt.option("site"));
   require("load-grunt-config")(grunt);
};

...但是从那里开始,我无法弄清楚如何将该值放在任务配置可以读取的位置。 有任何想法吗?任何帮助将非常感激!谢谢。

1 个答案:

答案 0 :(得分:0)

这可能是一种更优雅的方式,可能是v.1.0.0中的某些内容,但我目前使用的是上一个稳定版v.0.4.5

如果您想访问lodash模板grunt.option("whatever")中的<%= %>,则需要将其设置为grunt.initConfig({})中的媒体资源。

假设您在运行--prod时确定是否有grunt build标记,以确定它是否是产品。

您可以设置:

grunt.initConfig({

    ...
    production: grunt.option('prod'),
    ...

然后您可以在模板中使用它:

templates: {
            ...
            dest: '<%= production ? paths.dist : paths.dev %>/'
        }

因此,当您运行grunt build --prod时,目标文件夹会转到正确的位置。