我正在尝试将目录中的所有文件复制到另一个目录中,作为构建过程的一部分。它适用于我明确指定的单个文件,但是当我尝试复制整个目录时,它会执行奇怪的操作,例如复制完整的目录结构(或者根本没有)。以下是我的GruntFile.js的相关部分:
copy: {
myvoice: {
files: [
{ src:"src/html/index.html", dest:"dist/myvoice/index.html" },
{ src:"src/html/css/style.css", dest:"dist/myvoice/css/style.css" },
{ src:"src/html/js/require.js", dest:"dist/myvoice/js/require.js" },
{ src:"build/myvoice/main.js", dest:"dist/myvoice/js/main.js" },
{ src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
]
}
},
具体来说,这是我无法开展工作的最后一行:
{ src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
答案 0 :(得分:142)
this answer中的flatten: true
选项可能适用于某些情况,但在我看来,更常见的要求(如我的情况)是复制文件夹及其子文件夹结构,原样,dest
。似乎在大多数情况下,如果你有子文件夹,它们可能在代码中被引用。这样做的关键是cwd
选项,它将保留相对于指定工作目录的文件夹结构:
copy: {
files: {
cwd: 'path/to/files', // set working folder / root to copy
src: '**/*', // copy all files and subfolders
dest: 'dist/files', // destination folder
expand: true // required when using cwd
}
}
答案 1 :(得分:43)
如果指定文件glob,此任务将维护文件夹结构。你想要的是flatten
选项,它将删除结构。
{
expand: true,
flatten: true,
src: ['src/html/css/fonts/**'],
dest: 'dist/myvoice/css/fonts/',
filter: 'isFile'
}
查找Github repo中的其他可用选项。希望这会有所帮助。
答案 2 :(得分:23)
我想补充一点,更改 src 中glob的格式会修改副本的工作方式。
正如上面 bmoeskau 指出的那样,以下内容会复制dist/
中的所有内容并将其移至path/to/dir
(如果是copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '**'
}
}
则覆盖目的地已经存在)。
copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*'
}
}
但请注意:
dist/
只会复制src: '*/*'
内的文件以及目录,但不会将这些目录的内容复制到目的地。
此外,dist/
的以下内容将仅复制包含dist/
内容的目录。也就是说,copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*/*'
}
}
内的文件不会被复制。
src: '**/**'
最后,与上述相同,但dist/
会将dist/
内的仅文件以及path/to/dir
子目录中的文件复制到copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*/*',
flatten: true,
filter: 'isFile'
}
}
。所以目的地内没有文件夹。
{{1}}
答案 3 :(得分:0)
不得不为文件段使用egdy而不是花括号(在Coffeescript中)......
copy: {
files: [
cwd: 'path/to/files'
src: '**/*'
dest: 'dist/files'
expand: true
]
}
答案 4 :(得分:0)
如果您正在使用有角度的自耕农进行开发,那么这是使用grunt进行复制的更好方法。 expand:使用cwd时需要true。 <%= yeoman.app%>只是应用路线('。')。
{
expand: true,
cwd: '<%= yeoman.app %>/data',
dest: '<%= yeoman.dist %>/data',
src: ['**']
}