Скопируйте все файлы из каталога в другой с помощью Grunt.копия js
Я пытаюсь скопировать все файлы из каталога в другой каталог, как часть моего процесса сборки. Он отлично работает для отдельных файлов, которые я указываю явно, но когда я пытаюсь скопировать весь каталог, он делает странные вещи, такие как копирует полную структуру каталогов (или ничего вообще). Вот соответствующая часть из моего 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/" }
5 ответов
на а в ответ может работать для некоторых случаях, но мне кажется, что более общим требованием (как в моем случае) для копирования папки и ее вложенных папок структуры, как есть, до 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 РЕПО. Надеюсь, это поможет.
я хотел бы добавить, что изменение формата Глоб на 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/
а также каталоги, но Уилл!--23-->не скопируйте содержимое этих каталогов в пункт назначения.
кроме того, с 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'
}
}
пришлось использовать egdy вместо фигурных скобок для сегмента файлов (в Coffeescript)...
copy: {
files: [
cwd: 'path/to/files'
src: '**/*'
dest: 'dist/files'
expand: true
]
}
Если вы разрабатываете с angular yeoman, то это лучший способ скопировать с grunt. развернуть: true требуется при использовании cwd. - это просто маршрут приложения ('.').
{
expand: true,
cwd: '<%= yeoman.app %>/data',
dest: '<%= yeoman.dist %>/data',
src: ['**']
}