我有以下文件夹结构
root
src
ui
ui1
js
ui.js
page1
page.js
page2
page.js
ui2
js
ui.js
page1
page.js
page2
page.js
page3
page.js
css
js
ui
是否可以在此处运行grunt uglify以实现以下目的:将ui[x]
文件夹中的所有js文件从root/src/
连接到root/ui/
文件夹,保持路径结构完整?< / p>
我想以
结束root
src
ui
ui1
js
ui.js
page1
page.js
page2
page.js
ui2
js
ui.js
page1
page.js
page2
page.js
page3
page.js
css
js
ui
ui1
ui.min.js
ui2
ui.min.js
我的问题是稍后会添加ui[x]
和page[x]
文件夹,因此我需要将其设置为动态。
我能够实现的是连接所有文件而不保留路径或保持路径,uglify但不连接。任何帮助表示赞赏。
files: {
expand: true,
cwd: 'src/ui/',
src: '**/*',
dest: 'ui/'
}
答案 0 :(得分:1)
问题的解决方案是实施rename function。当默认配置无法满足您的用例时,此函数的目的是让您更好地控制src / dest映射。将为与rename
模式匹配的每个源文件调用src
函数,并允许您定义确定目标文件的逻辑。
即使我们将多个源文件映射到单个目标文件,这也会有效。文档说:
如果将多个匹配的src路径重命名为相同的目标(即,如果将两个不同的文件重命名为同一个文件),则每个输出都将添加到它的源数组中。
我们的目标,从root/src/ui/
目录开始,收集以“.js”结尾的每个文件路径,并为每个文件路径生成一个目标文件路径,该路径是第一个目录名加“/ui.min.js ”。例如,ui1/js/ui.js
将映射到ui1/ui.min.js
,而ui2/page3/page.js
将映射到ui2/ui.min.js
。
建立逻辑后,rename
函数的实现相当简单。我们的Gruntfile如下所示:
module.exports = function (grunt) {
grunt.initConfig({
clean: {
dist: ['root/ui']
},
uglify: {
dist: {
files: [
{
expand: true,
cwd: 'root/src/ui/',
src: ['**/*.js'],
dest: 'root/ui/',
rename: function (dest, src) {
return dest + src.substring(0, src.indexOf('/') + 1) + 'ui.min.js';
}
}
]
}
}
});
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.registerTask('default', ['clean', 'uglify']);
};