Я пытаюсь скопировать все файлы из каталога в другой в рамках процесса сборки. Он отлично работает для отдельных файлов, которые я указываю явно, но когда я пытаюсь скопировать весь каталог, он делает странные вещи, например копирует полную структуру каталогов (или вообще ничего). Вот соответствующая часть из моего 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/" }
источник
cwd
опциями, обязательно обращайтесьexpand:true
. Если не установитьexpand:true
, cwd не будет работать должным образом.flatten: false
чтобы это работало.**/*
Это то, что я искал, я использовал ** спасибо, чувак.Эта задача будет поддерживать структуру папок, если вы укажете глобус файла. Вам нужен
flatten
вариант, который уберет структуру.{ expand: true, flatten: true, src: ['src/html/css/fonts/**'], dest: 'dist/myvoice/css/fonts/', filter: 'isFile' }
Остальные доступные варианты найдите в репозитории Github . Надеюсь это поможет.
источник
Я хотел бы добавить, что изменение формата глобуса в src изменит работу копии.
Как указано выше 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' } }
источник
**
всегда ли означает файлы и каталоги, а*
просто файлы?*
s, используемые как один шаблон, будут соответствовать всем файлам и нулю или более каталогам и подкаталогам . Если за ними следует a/
, два соседних*
s будут соответствовать только каталогам и подкаталогам .**
соответствует всему , тогда как**/
только каталогам и подкаталогам (не файлам).Пришлось использовать egdy вместо фигурных скобок для сегмента файлов (в Coffeescript) ...
copy: { files: [ cwd: 'path/to/files' src: '**/*' dest: 'dist/files' expand: true ] }
источник
Если вы разрабатываете с помощью angular yeoman, то это лучший способ скопировать с grunt. expand: true требуется при использовании cwd. <% = yeoman.app%> - это просто маршрут приложения ('.').
{ expand: true, cwd: '<%= yeoman.app %>/data', dest: '<%= yeoman.dist %>/data', src: ['**'] }
источник