使用Grunt.js复制将所有文件从目录复制到另一个目录

我试图将目录中的所有文件复制到另一个目录作为我的构build过程的一部分。 它适用于我明确指定的单个文件,但是当我尝试复制整个目录时,它会像复制完整的目录结构(或根本就没有)那样奇怪。 这里是我的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/" } 

这个答案中的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 } } 

如果您指定文件glob,则此任务将维护文件夹结构。 你想要的是flatten选项,将删除结构。

 { expand: true, flatten: true, src: ['src/html/css/fonts/**'], dest: 'dist/myvoice/css/fonts/', filter: 'isFile' } 

在Github回购中find其余的可用选项。 希望这可以帮助。

我想补充说,在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' } } 

如果你正在使用angular度来看,那么这是用grunt复制的更好的方法。 使用cwd时需要展开:true。 <%= yeoman.app%>就是应用程序path('。')。

  { expand: true, cwd: '<%= yeoman.app %>/data', dest: '<%= yeoman.dist %>/data', src: ['**'] } 

不得不使用egdy而不是花括号的文件段(在Coffeescript)…

 copy: { files: [ cwd: 'path/to/files' src: '**/*' dest: 'dist/files' expand: true ] }