从另一个任务创建的Grunt Alter模板

时间:2014-02-26 11:40:33

标签: gruntjs

我在Grunt中为clean执行了一项任务,我还有copy的另一项任务。基本上,我在一个地方清理一些东西,然后用新的东西替换它,进入相同的地方。我无法弄清楚如何映射我的copy.files.dest,使其使用clean.env.files.src中的值,但会切换修饰符。所以:

// Project settings
    yeoman: {
      // configurable paths
      app: 'app',
      dist: 'dist',
      prod:'L:/dist'
    }
// the prod sub-block of the clean task configuration
 prod:{
        files:[{
            dot:true,
            src:[
                '<%= yeoman.prod% >/scripts',
                 '<%= yeoman.prod% >/styles',
                 '<%= yeoman.prod% >/views',
                 '<%= yeoman.prod% >/*.html',
                 '<%= yeoman.prod% >/images'        

            ]
        }]
      }

//the prod sub-block of the copy task configuration
      prod:{
        files:[{
            expand:true,
            dot:true,
            cwd:'<%= yeoman.dist  %>',
            dest:'<%= yeoman.prod  %>',
            //can i use the result files from this path, but use yeoman.dist instead of yeoman.prod?
            src:['<%= clean:prod:files:src %>'] 
        }]
      }

我想使用<%= clean:prod:files:src %>中的模板,但使用备用配置(换句话说,该任务使用yeoman.prod,而我希望列出所有相同的文件,并且要做一些需要来自yeoman.dist的src代替)。

有没有办法通过grunt语法执行此操作,还是我必须依赖我的(未显示)自定义函数?

编辑,删除了对父任务的引用,因为它们没有反映我的代码实际上是什么样的。

1 个答案:

答案 0 :(得分:3)

永远记住,Gruntfiles是javascript。它们必须用有效的javascript编写。

clean.prod:{}无效javascript。

Grunt模板中使用的点符号<%= clean.prod %>仅仅是一种通过javascript对象进行翻译的模板格式,但不是javascript语言本身的一部分。

所以改为将配置更改为:

clean: {
  prod: {
    src: [ /* file patterns here */ ]
  }
}

然后使用src访问clean:prod任务的<%= clean.prod.src %>属性。

我已从files数组中取出配置,就像您的目标src/dest中只有一个prod块一样,不需要它。但是如果你想在配置中访问该位置的值,你必须记住files是一个数组。因此,使用模板访问数组的第一项将是:<%= clean.prod.files[0].src %>。但除非需要,否则不要使用files数组要简单得多。

有关javascript对象的更多信息,请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects;有关grunt模板的详细信息,请参阅http://gruntjs.com/configuring-tasks#templates