在保持文件夹结构的同时,粉碎了许多文件夹中的许多文件

问题描述 投票:1回答:3

我在我的项目中使用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

有没有这样一种方法,而不必在自己的concat行中专门添加每个“子”?

gruntjs grunt-contrib-concat
3个回答
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。


0
投票

在连续任务中使用globbing patterns。引用链接的文档:

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


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`;
                }
            }
        ]
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.