使 dest 文件夹适应 ** 通配模式
Adapt dest folder to ** globbing pattern
我正在使用 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
,这不是我想要的。
有什么建议吗?谢谢!
看起来您可以使用 flatten
来获得精简的目标路径:
gruntCopyFiles.images = {
flatten: true,
expand: true,
cwd: './src/model/',
src: ["**/public/img/*.png", "**/public/img/*.jpg"],
dest: "./dist/images/"
}
来自the docs:
flatten
Remove all path parts from generated dest paths.
Is there a way to specify that with grunt-contrib-copy
(maybe the rename function?) or do I have to iterate manually over the files?
利用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
我正在使用 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
,这不是我想要的。
有什么建议吗?谢谢!
看起来您可以使用 flatten
来获得精简的目标路径:
gruntCopyFiles.images = {
flatten: true,
expand: true,
cwd: './src/model/',
src: ["**/public/img/*.png", "**/public/img/*.jpg"],
dest: "./dist/images/"
}
来自the docs:
flatten
Remove all path parts from generated dest paths.
Is there a way to specify that with
grunt-contrib-copy
(maybe the rename function?) or do I have to iterate manually over the files?
利用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