Grunt Concat在保留文件夹结构的同时在许多文件夹中存储了许多文件

时间:2015-10-19 17:31:02

标签: gruntjs grunt-contrib-concat

我在我的项目中使用Grunt concat。我想在文件夹级别组合文件。 E.G。

js >
  parent >
     child1 >
        a.js
        b.js
        c.js
     child2 >
        a.js
        b.js

成:

js >
  parent >
     child1 >
       child1combined.js
     child2 >
        child2combined.js

有没有一种方法可以做到这一点,而无需在其自己的连接线中专门添加每个“子”?

3 个答案:

答案 0 :(得分:1)

我最终在this post找到了以下内容。

grunt.registerTask("taskName", "Task Description", function() {

            // get all module directories
            grunt.file.expand("src/js/parent/*").forEach(function (dir) {

                // get the module name from the directory name
                var dirName = dir.substr(dir.lastIndexOf('/')+1);

                // get the current concat object from initConfig
                var concat = grunt.config.get('concat') || {};

                // create a subtask for each module, find all src files
                // and combine into a single js file per module
                concat[dirName] = {
                    src: [dir + '/**/*.js'],
                    dest: 'build/js/parent/' + dirName + '/combined.js'
                };

                // add module subtasks to the concat task in initConfig
                grunt.config.set('concat', concat);
            });
        });

然后从registerTask中调用taskName。

答案 1 :(得分:0)

在concat任务中使用globbing patterns。引用链接文档:

  

单独指定所有源文件路径通常是不切实际的,   所以Grunt支持文件名扩展(也称为通配)。

答案 2 :(得分:0)

我知道这个话题很老,但是我想分享自己的解决方案,因为我找不到一个可以在网络上正常工作的简单解决方案。

concat: {
        files: [
            {
                expand: true,
                src: ["**/*.js"],
                dest: "dest/js",
                cwd: "src/js",
                rename: function(dst, src) {
                    const srcParts = String(src).split("/");
                    let dstPath = "";
                    let dstName = srcParts[0].split(".")[0];
                    if (srcParts.length > 1) {
                        dstName = srcParts[srcParts.length - 2];
                        dstPath =
                            srcParts
                                .slice(0, srcParts.length - 1)
                                .join("/") + "/";
                    }
                    return `${dst}/${dstPath + dstName}.js`;
                }
            }
        ]
    }

我希望这对某人有帮助:)