J'essaie de copier tous les fichiers d'un répertoire dans un autre répertoire dans le cadre de mon processus de construction. Cela fonctionne bien pour des fichiers individuels que je spécifie explicitement, mais lorsque j'essaie de copier le répertoire entier, cela fait des choses étranges, comme de copier la structure de répertoires complète (ou rien du tout). Voici la partie pertinente de mon 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/" }
]
}
},
Plus précisément c'est la dernière ligne que je ne peux pas me rendre au travail:
{ src:"src/html/css/fonts/*", dest:"dist/myvoice/css/fonts/" }
Le flatten: true
option comme dans cette réponse peut fonctionner dans certains cas, mais il me semble que l'exigence la plus courante (comme dans mon cas) est de copier un dossier et sa structure de sous-dossiers, comme- est, à dest
. Il semble que dans la plupart des cas, si vous avez des sous-dossiers, ils sont probablement référencés de cette façon dans le code. La clé pour ce faire est l'option cwd
, qui préservera la structure des dossiers relative au répertoire de travail spécifié:
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
}
}
Cette tâche conservera la structure des dossiers si vous spécifiez un fichier glob. Ce que vous voulez, c'est l'option flatten
qui supprimera la structure.
{
expand: true,
flatten: true,
src: ['src/html/css/fonts/**'],
dest: 'dist/myvoice/css/fonts/',
filter: 'isFile'
}
Trouvez le reste des options disponibles dans le rapport Github . J'espère que cela t'aides.
Je voudrais ajouter que changer le format de glob dans src modifiera le fonctionnement de la copie.
Comme souligné par bmoeskau ci-dessus, ce qui suit va copier tout à l'intérieur de dist/
Et le déplacer vers path/to/dir
(écrasant la destination si elle existe déjà).
copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '**'
}
}
Notez cependant que:
copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*'
}
}
Copiera uniquement les fichiers de dist/
Ainsi que les répertoires, mais ne copiera pas le contenu de ces répertoires dans la destination.
En outre, ce qui suit avec src: '*/*'
Ne que copie les répertoires dont le contenu est contenu dans dist/
. C'est-à-dire que les fichiers situés à l'intérieur de dist/
Ne seront pas copiés.
copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*/*'
}
}
Enfin, comme ci-dessus, mais src: '**/**'
Copie ( uniquement les fichiers contenus dans dist/
Ainsi que les fichiers contenus dans les sous-répertoires dist/
Dans path/to/dir
. Donc, il n'y aura pas de dossiers à l'intérieur de la destination.
copy: {
files: {
expand: true,
dest: 'path/to/dir',
cwd: 'dist/',
src: '*/*',
flatten: true,
filter: 'isFile'
}
}
Il a fallu utiliser egdy à la place d'accolades pour le segment de fichiers (dans Coffeescript) ...
copy: {
files: [
cwd: 'path/to/files'
src: '**/*'
dest: 'dist/files'
expand: true
]
}
Si vous développez avec angular yeoman, c’est le meilleur moyen de copier avec grunt. Expand: true est requis pour l’utilisation de cwd. <% = Yeoman.app%> n’est que le chemin de l’application. ('.').
{
expand: true,
cwd: '<%= yeoman.app %>/data',
dest: '<%= yeoman.dist %>/data',
src: ['**']
}