我正在使用grunt-contrib-copy。我有这个文件树:
`-- src
`-- model
|-- a4
| `-- public
| |-- css
| |-- img
| `-- js
|-- posters
| `-- public
| |-- css
| |-- img
| `-- js
`-- prints
`-- public
|-- css
|-- img
`-- js
我想复制文件
src/model/**/public/img
到dist/images/{1}/
其中{1}
是文件夹名称(a4,海报,打印...也必须更改的动态文件夹),所以:
src/model/a4/public/img/file.png -> dist/images/a4/file.png
有没有办法用grunt-contrib-copy(可能是重命名函数?)指定它,还是我必须手动迭代文件?
现在这就是我所拥有的:
grunt.registerTask 'images-generate', ->
gruntCopyFiles.images = {
expand: true,
cwd: './src/model/',
src: ["**/public/img/*.png", "**/public/img/*.jpg"],
dest: "./dist/images/"
}
但是这会将src/model/a4/public/img/file.png
复制到dist/images/a4/public/img/file.png
,这不是我想要的。
有什么建议吗?谢谢!
答案 0 :(得分:1)
有没有办法用
grunt-contrib-copy
(可能是重命名函数?)指定它,还是我必须手动迭代文件?
利用rename
函数是实现此目的的方法。单独的Glob模式不能满足您的要求,flatten
选项也不能满足您的要求。
以下内容还会复制 可能 可能位于源img
文件夹中的所有子文件夹:
gruntCopyFiles.images = {
expand: true,
cwd: 'src/model',
dest: 'dist/images',
src: '**/public/img/**/*.{png,jpg,gif}',
rename: function(dest, src) {
var items = src.split('/'),
baseIndex = items.indexOf('img') + 1,
subPath = items.slice(baseIndex, items.length).join('/');
return [dest, items[0], subPath].join('/');
}
}
示例:强>
src/model/a4/public/img/file.png
- > dist/images/a4/file.png
src/model/a4/public/img/
quux
/file.jpg
- > dist/images/a4/
的 quux
强> /file.jpg
答案 1 :(得分:0)
您似乎可以使用flatten
来获取精简的目标路径:
gruntCopyFiles.images = {
flatten: true,
expand: true,
cwd: './src/model/',
src: ["**/public/img/*.png", "**/public/img/*.jpg"],
dest: "./dist/images/"
}
来自the docs:
flatten
从生成的目标路径中删除所有路径部分。