Próbuję skopiować wszystkie pliki z katalogu do innego katalogu w ramach procesu kompilacji. Działa dobrze w przypadku pojedynczych plików, które wyraźnie określam, ale kiedy próbuję skopiować cały katalog, robi dziwne rzeczy, takie jak kopiowanie pełnej struktury katalogów (lub w ogóle nic). Oto odpowiednia część z mojego pliku 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/" }
]
}
},
W szczególności jest to ostatnia linia, której nie mogę zabrać do pracy:
{ src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
źródło
cwd
opcji, koniecznie włączexpand:true
. Jeśli tego nie ustawiszexpand:true
, cwd nie będzie działać poprawnie.flatten: false
aby to działało.**/*
Właśnie tego szukałem, którego używałem ** dzięki stary.To zadanie zachowa strukturę folderów, jeśli określisz plik globalny. To, czego chcesz, to
flatten
opcja, która usunie strukturę.{ expand: true, flatten: true, src: ['src/html/css/fonts/**'], dest: 'dist/myvoice/css/fonts/', filter: 'isFile' }
Znajdź pozostałe dostępne opcje w repozytorium Github . Mam nadzieję że to pomoże.
źródło
Dodam, że zmiana formatu globu w src zmieni sposób działania kopii.
Jak wskazano powyżej w bmoeskau , poniższe czynności skopiują wszystko w środku
dist/
i przeniesie je dopath/to/dir
(nadpisując miejsce docelowe, jeśli już istnieje).copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '**' } }
Pamiętaj jednak, że:
copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '*' } }
Kopiuje tylko pliki wewnątrz
dist/
oraz katalogi, ale nie kopiuje zawartości tych katalogów do miejsca docelowego.Ponadto, dodaje się
src: '*/*'
będzie tylko skopiować katalogi z zawartością wewnątrzdist/
. Oznacza to, że pliki znajdujące się w środkudist/
nie zostaną skopiowane.copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '*/*' } }
Na koniec tak samo jak powyżej, ale
src: '**/**'
skopiuje tylko pliki wewnątrz,dist/
a także pliki wewnątrzdist/
podkatalogów dopath/to/dir
. Dlatego w miejscu docelowym nie będzie żadnych folderów.copy: { files: { expand: true, dest: 'path/to/dir', cwd: 'dist/', src: '*/*', flatten: true, filter: 'isFile' } }
źródło
**
zawsze oznacza pliki i katalogi, a*
tylko pliki?*
s użyte jako pojedynczy wzorzec będą pasować do wszystkich plików i zera lub większej liczby katalogów i podkatalogów . Jeśli występuje po nim a/
, dwa sąsiednie*
s będą pasować tylko do katalogów i podkatalogów .**
dopasowuje wszystko , ale**/
tylko katalogi i podkatalogi (nie pliki).Musiałem użyć egdy zamiast nawiasów klamrowych dla segmentu plików (w Coffeescript) ...
copy: { files: [ cwd: 'path/to/files' src: '**/*' dest: 'dist/files' expand: true ] }
źródło
Jeśli rozwijasz się z kanciastym człowiekiem, jest to lepszy sposób na kopiowanie z pomrukiem. expand: true jest wymagane przy używaniu cwd. <% = yeoman.app%> to po prostu trasa do aplikacji („.”).
{ expand: true, cwd: '<%= yeoman.app %>/data', dest: '<%= yeoman.dist %>/data', src: ['**'] }
źródło