多次 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(..);
}