多次 Grunt Concat 同一个文件
Grunt Concat same file multiple times
我想将 grunt-contrib-concat
用于应用程序前端 HTML 模板目的,这对我很有用。
我想定义页面部分并将它们连接到将由 handlebars 编译的输出文件中。
我已经设置好所有内容,但是 Concat 不允许我多次使用同一个文件。
基本上 concat 是在过滤源,这样它们就不会出现超过一次。第二个partial1.hbs
不会被串联。
pageconcat: {
src: [
'app/templates/partial1.hbs',
'app/templates/partial2.hbs',
'app/templates/partial1.hbs'
],
dest: 'app/result.hbs'
}
有什么办法吗?
更新 1
在试用了 grunt 的控制台输出功能之后,我能够调试(某种程度上)concat 插件。这是我发现的:由于某种原因,grunt 对输入数组进行了重复数据删除。
更新 2
重复数据删除发生在 grunt 使用的 foreach 文件循环中。我设法绕过了那个(见答案)。我不知道我的解决方案有多可靠,但这是一种解决方法,如果您没有输入错误的内容,它会很好用。
您可以使用文件数组格式设置两个不同的源集。像这样:
{
"files": [{
"src": [
"app/templates/partial1.hbs",
"app/templates/partial2.hbs"
],
"dest": "app/result.hbs"
}, {
"src": [
"app/result.hbs",
"app/templates/partial1.hbs"
],
"dest": "app/result.hbs"
}]
}
正如评论中指出的那样,将 "app/result.hbs" 添加到第二个源集中。
谢谢
解决方案
经过一些调试,我想出了一个解决方案。当然不是最好的,但它应该工作得很好。
我按以下方式编辑了 node_modules 文件夹中的 concat.js 插件文件:
grunt.registerMultiTask('concat', ...){
var self = this;
//several lines of code
//...
//replace f.src.filter(..) wtih
self.data.src.filter(..);
}
我想将 grunt-contrib-concat
用于应用程序前端 HTML 模板目的,这对我很有用。
我想定义页面部分并将它们连接到将由 handlebars 编译的输出文件中。
我已经设置好所有内容,但是 Concat 不允许我多次使用同一个文件。
基本上 concat 是在过滤源,这样它们就不会出现超过一次。第二个partial1.hbs
不会被串联。
pageconcat: {
src: [
'app/templates/partial1.hbs',
'app/templates/partial2.hbs',
'app/templates/partial1.hbs'
],
dest: 'app/result.hbs'
}
有什么办法吗?
更新 1
在试用了 grunt 的控制台输出功能之后,我能够调试(某种程度上)concat 插件。这是我发现的:由于某种原因,grunt 对输入数组进行了重复数据删除。
更新 2
重复数据删除发生在 grunt 使用的 foreach 文件循环中。我设法绕过了那个(见答案)。我不知道我的解决方案有多可靠,但这是一种解决方法,如果您没有输入错误的内容,它会很好用。
您可以使用文件数组格式设置两个不同的源集。像这样:
{
"files": [{
"src": [
"app/templates/partial1.hbs",
"app/templates/partial2.hbs"
],
"dest": "app/result.hbs"
}, {
"src": [
"app/result.hbs",
"app/templates/partial1.hbs"
],
"dest": "app/result.hbs"
}]
}
正如评论中指出的那样,将 "app/result.hbs" 添加到第二个源集中。 谢谢
解决方案
经过一些调试,我想出了一个解决方案。当然不是最好的,但它应该工作得很好。
我按以下方式编辑了 node_modules 文件夹中的 concat.js 插件文件:
grunt.registerMultiTask('concat', ...){
var self = this;
//several lines of code
//...
//replace f.src.filter(..) wtih
self.data.src.filter(..);
}