grunt 利用rename灵活修改生成目录(解决cwd不能使用通配符问题)
最近遇到一个grunt配置问题,涉及使用imagemin时需要把多个不同目录下的images文件统一压缩到一个目录下,因为要保持目录结构所以使用cwd使用通配符去匹配images目录,结果发现grunt在cwd里面不能使用通配符,研究了半天发现其实可以使用rename去灵活修改生成目录,而src里面是允许通配符的。
rename参数接收目标路径和源文件路径作为参数,而返回一个最终的文件路径即为文件最终路径(需要注意rename的优先级很低,开发中如果配置了ext等配置,rename中接收到的为处理过的数据信息!)。
下面是目录结构:
错误的配置:
// 图片压缩
imagemin: {
dist: {
files: [{
expand: true,
cwd: 'extends/*/res/images',
src: ['**/*.{png,jpg,gif}'],
dest: 'res/dist/images'
}]
}
},
解决办法:
// 图片压缩
imagemin: {
dist: {
files: [{
expand: true,
src: ['extends/*/res/images/**/*.{png,jpg,gif}'],
dest: 'res/dist/images',
rename: function (dest, src) {
return dest + src.replace(/extends\/.*?\/res\/images/, '');
}
}]
}
},
