我在我的项目中使用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
有没有一种方法可以做到这一点,而无需在其自己的连接线中专门添加每个“子”?
答案 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`;
}
}
]
}
我希望这对某人有帮助:)