使用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 ] }