web-dev-qa-db-fra.com

Configurer la tâche de copie grunt pour exclure les fichiers / dossiers

J'ai installé la tâche grunt grunt-contrib-copy. Je l'intègre dans mon Gruntfile.js Et charge la tâche via grunt.loadNpmTasks('grunt-contrib-copy');.

Actuellement, j'utilise la configuration suivante pour créer un dossier avec un sous-ensemble de mes fichiers/dossiers js.

copy: {
            options: {
                processContent: [],
                processContentExclude: ['build/**', 'bin/**', '.*', '*.orig', '*.bak', '.*/**', '*.log', 'dist/**', 'test/**', 'dev/**', 'pyserver/**', 'node_modules/**', 'doc/**']
            },
            du: {
                files: [ 
                    {src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'},
                    {src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'},
                    {expand: true, cwd: './', src: ['**'], dest: 'output/'}
                ]
            }
        }

Cela fonctionne bien, mais chaque fois que j'exécute une copie grunt, il se termine avec le message d'erreur suivant:

Copying Gruntfile.js -> output/Gruntfile.js
Warning: Error while processing "Gruntfile.js" file. Use --force to continue.

Je voudrais exclure Gruntfile.js Et tous les fichiers *.less Dans js/**/*. Je l'ai essayé avec !(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js) ... Mais rien ne fonctionne. Ajoutée au tableau processContentExclude, mais sans succès aussi.

Alors, comment puis-je exclure le Gruntfile.js Et tous les autres fichiers de la structure de dossiers js/**/*?

38
mybecks

Trouvé la solution:

Il n'y a pas besoin de ces lignes:

files: [ 
          {src: ['.conf1', '.conf2', './config.js'], dest: 'output/toolkit/', filter: 'isFile'},
          {src: ['./css/**/*', './img/**/*', './js/**/*', './release/**/*', './lib/**/*', './locale/**/*'], dest: 'output/toolkit/'},
          {expand: true, cwd: './', src: ['**'], dest: 'output/'}
       ]

car {expand: true, cwd: './', src: ['**'], dest: 'output/'} est une nouvelle étape de copie, copiant tous les fichiers de ./ à output. Ce qui n'est pas nécessaire pour moi, car les lignes ci-dessus copient déjà les fichiers requis dans output/toolkit.

Les deux lignes suivantes font donc l'affaire. Pas besoin d'options ou d'autre chose. Pour garder le *.less des dossiers '!**/*.less' Fait le travail.

files: [ 
          {src: ['.conf1', '.conf2', 'config.js'], dest: 'output/toolkit/', filter: 'isFile'},
          {src: ['css/**', 'img/**', 'js/**', 'release/**', 'lib/**', 'locale/**', '!**/*.less'], dest: 'output/toolkit/'}
       ]
54
mybecks

Je voulais exclure tous les fichiers .gz de ma copie et cette option a fait le travail pour tous les dossiers

{
  expand: true,
  cwd:    './build/www/',
  src:    [ '**', '!**/*.gz' ],
  dest:   './mydDest'
}

Alors peut-être essayez !**/*.less, !gruntfile.js (sans parens)

15
StackHola

En supposant que "Gruntfile.js" se trouve dans le répertoire racine, la dernière ligne de vos options de copie le configure pour copier tout ce qui se trouve dans la racine vers "sortie /".

Si cela est prévu, ajoutez "! Gruntfile.js" à votre tableau de chemins de fichiers src.

{
  expand: true, 
  cwd: './', 
  src: ['**'],      // ex. src: ['**',  '!Gruntfile.js'],
  dest: 'output/'
}

Reportez-vous à ces solutions à partir de ce fil et fil d'origine

3
daxeh

Si vous avez la liberté de passer à une autre tâche Grunt:

Il y a aussi https://github.com/clavery/grunt-copy-to qui a une option explicite "ignorer" pour spécifier les fichiers et répertoires à omettre. Le README dans Github montre un exemple de configuration incluant les options Ignorer.

Cela fonctionne un peu différemment de la copie régulière car il respecte les temps de modification. Mais cela pourrait en fait être le bienvenu (c'était dans mon cas).

Du README:

Comme grunt-contrib-copy mais copie uniquement les fichiers plus récents et conserve les heures modifiées pour les fichiers copiés. Utile pour créer des répertoires de construction qui peuvent être synchronisés ultérieurement à l'aide d'outils qui dépendent des heures de modification des fichiers.

(Je ne suis qu'un utilisateur de ce projet (au moins jusqu'à présent).)

3
Risadinha

Je pense que cela devrait le faire. Pas besoin de /**/*. /** couvre tous les fichiers dans le chemin et ses sous-répertoires

{src: ['./css/**', './img/**', './js/**', './release/**', './lib/**', './locale/**'], dest: 'output/toolkit/'},
{expand: true, cwd: './', src: ['**'], dest: 'output/'}
0
Travis G