Grunt Concat多次使用相同的文件

时间:2015-04-16 20:32:42

标签: javascript gruntjs concatenation concat

我希望将grunt-contrib-concat用于应用程序前端HTML模板目的,这对我有用。

我想定义页面部分并将它们连接到一个将由把手编译的输出文件中。

我已经完成了所有设置,但是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文件循环中。我设法绕过了(见答案)。我不知道我的解决方案有多可靠,但它是一种解决方法,如果你没有输入错误的话,它会很有效。

2 个答案:

答案 0 :(得分:0)

您可以使用文件数组格式设置两个不同的源集。像这样:

{
    "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”添加到第二个源集,正如评论中指出的那样。 感谢。

答案 1 :(得分:0)

解决方案

经过一些调试后,我想出了一个解决方案。当然不是最好的,但它应该正常工作。

我通过以下方式编辑了node_modules文件夹中的 concat.js 插件文件:

grunt.registerMultiTask('concat', ...){
    var self = this;

    //several lines of code
    //...

    //replace f.src.filter(..) wtih
    self.data.src.filter(..);
}