Javascript Grunt-解析非字符串(例如数组)模板
假设我在grunt配置中有一个变量,该变量的值为数组。一个真实的例子是插件中的Javascript Grunt-解析非字符串(例如数组)模板,javascript,gruntjs,Javascript,Gruntjs,假设我在grunt配置中有一个变量,该变量的值为数组。一个真实的例子是插件中的grunt.regarde.changed,它列出了所有已更改的文件 我想使用模板解析该数组,以便(在本例中)复制更改的文件: copy: { staticWeb: { src: '<%= grunt.regarde.changed %>', dest: 'someDir' }, 复制:{ 静态网络:{ src:“”, 目的地:“someDir” }, 在本例
grunt.regarde.changed
,它列出了所有已更改的文件
我想使用模板解析该数组,以便(在本例中)复制更改的文件:
copy: {
staticWeb: {
src: '<%= grunt.regarde.changed %>',
dest: 'someDir'
},
复制:{
静态网络:{
src:“”,
目的地:“someDir”
},
在本例中,src
得到的是一个逗号分隔的字符串,而不是数组。Grunt的文件处理器不解析该字符串,因此无法找到src文件
我无法删除模板周围的单引号,因为这样它是无效的javascript
那么如何将grunt.regarde.changed
数组传递到src
变量?您尝试过:
copy: {
staticWeb: {
src: '<%= grunt.regarde.changed.split(",") %>',
dest: 'someDir'
}
}
复制:{
静态网络:{
src:“”,
目的地:“someDir”
}
}
我遇到了与您完全相同的问题,请用花括号围绕模板来解决
这是你的代码,修改过了
copy: {
staticWeb: {
src: '{<%= grunt.regarde.changed %>}', // added curly brackets
dest: 'someDir'
}
}
复制:{
静态网络:{
src:'{}',//添加了花括号
目的地:“someDir”
}
}
它将
src
输出为{source1,source2,source3}
,这与使用数组相同。(请参阅)一旦你知道如何解决这个问题,只要几行代码,问题就很容易解决,但我花了相当长的时间从Grunt源代码中挖掘出所有相关信息,以了解该做什么,所以请耐心等待,我将带你了解背景
获取配置对象上的属性的一般方法是直截了当的:
<%= some.property %> // fetches grunt.config.get('some.property')
这将输出
$ grunt
Running "myValSetter" task
Running "debug:using_attribute" (debug) task
data.src: c/file1.txt,a/file2.txt,b/file3.txt
type: string
Running "debug:using_task" (debug) task
data.src: [ 'c/file1.txt', 'a/file2.txt', 'b/file3.txt' ]
type: Array
Running "debug:no_task_direct_setter" (debug) task
data.src: [ 'c/file1.txt', 'a/file2.txt', 'b/file3.txt' ]
type: Array
Done, without errors.
这个示例只是为了说明这个概念,但是您应该能够轻松地将其自定义到您的实例:)//假设regarde是一个grunt插件(还没有使用,链接已断开)
副本:{
静态网络:{
src:“”,
目的地:“someDir”
}
}
#ezpz太棒了!我为此挣扎了好几个小时……一个问题是,由于某种原因,它无法保持文件顺序……:-(你试过了吗?Grunt v0.4.5目前是最新的稳定版本,它对我不起作用。这太棒了。谢谢。我对实现所做的一个更改是使用
Grunt.config.set
创建单个Grunt“全局”调用grunt.values
以包含配置中多次使用的所有非字符串值,例如grunt.config.set('values',{a:[1,2],b:[2,3]等:[3,4]})
。此外,我不认为需要创建其他grunt
属性,如示例中所示的grunt.somevalue
“注册”直接使用grunt.config.set
的非字符串值似乎就足够了。很好,有人利用了它-我记得用了一整晚的黑客攻击,包括阅读所有相关的grunt源代码来理解引擎盖下发生的事情!关于grunt.somevalue
的事情,你是对的。我用现在答案中有一个普通变量。哦,现在我记起来了。我用它来显示直接读取设置的属性值和使用grunt.config.set之间的区别。我必须恢复编辑,否则注释毫无意义。//src://将是字符串我已清除了答案,添加了一些任务,并重命名了任务,因此更清楚的是发生了什么以及为什么会发生。在未来,我希望grunt模板将以本机方式处理非字符串值。但现在,这是我们最好的选择。这应该是公认的答案。
$ grunt
Running "myValSetter" task
Running "debug:using_attribute" (debug) task
data.src: c/file1.txt,a/file2.txt,b/file3.txt
type: string
Running "debug:using_task" (debug) task
data.src: [ 'c/file1.txt', 'a/file2.txt', 'b/file3.txt' ]
type: Array
Running "debug:no_task_direct_setter" (debug) task
data.src: [ 'c/file1.txt', 'a/file2.txt', 'b/file3.txt' ]
type: Array
Done, without errors.
// assuming that regarde is a grunt plugin (haven't used—link is broken)
copy: {
staticWeb: {
src: '<% regarde.changed %>',
dest: 'someDir'
}
}