2013-03-04 15 views
37

Ho installato il task grunt grunt-contrib-copy. Lo inserisco nel mio Gruntfile.js e carica l'attività tramite grunt.loadNpmTasks('grunt-contrib-copy');.Configurare l'attività di copia grunt per escludere file/cartelle

Attualmente utilizzo la seguente configurazione per creare una cartella con un sottoinsieme di file/cartelle 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/'} 
       ] 
      } 
     } 

Questo funziona bene, ma ogni volta che esegue grugnito copiarlo esce con il seguente messaggio di errore:

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

Vorrei escludere Gruntfile.js e tutti i file in *.lessjs/**/*. Provato con !(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js) ... Ma niente funziona. Aggiunto all'array processContentExclude, ma anche senza successo.

Quindi, come posso escludere lo Gruntfile.js e tutti i file in meno nella struttura di cartelle js/**/*?

risposta

51

trovato la soluzione:

Non v'è alcun bisogno di queste righe:

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/'} 
     ] 

perché {expand: true, cwd: './', src: ['**'], dest: 'output/'} è un nuovo passo di copia, la copia di tutti i file da ./ a output. Che per me non è necessario, perché le righe precedenti stanno già copiando i file richiesti su output/toolkit.

Quindi le seguenti due righe fanno il lavoro. Non c'è bisogno di opzioni o altro. Per tenere fuori i file *.less'!**/*.less' fa il lavoro.

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

Per omettere le directory, usare '! Workingdir/omitted/**' – Ben

0

Penso che questo dovrebbe farlo. Non necessario per /**/*. /** copre tutti i file nel percorso e le sue sottodirectory

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

grazie per la risposta, ho cambiato/**/* a/**, ma che ha fatto non aiuta. Il comportamento è sempre lo stesso. – mybecks

+0

Chiediti solo se stai eseguendo 'Gruntfile.js' da locaton' output/Gruntfile.js'. In tal caso, eseguilo da qualche altra posizione o escludilo. –

+0

Non c'è bisogno che la mia ultima riga inizi con {exapnd ...}. Sono necessarie solo le due righe {src}. – mybecks

3

Se avete la libertà di passare a un diverso compito Grunt:

C'è anche https://github.com/clavery/grunt-copy-to, che ha un'opzione esplicita "ignora" per specificare i file e le directory da omettere. Il README in Github mostra una configurazione di esempio che include opzioni di ignoranza.

Funziona un po 'diverso dalla copia normale in quanto onora i tempi di modifica. Ma potrebbe essere effettivamente il benvenuto (era nel mio caso).

Dal README:

Come i file grunt-contrib-copia, ma solo copie che sono più recenti e mantiene gli orari modificati per i file copiati. Utile per creare directory di build che possono essere successivamente sincronizzate utilizzando strumenti che si basano su tempi di modifica del file.

(Sono solo un utente di quel progetto (almeno finora).)

+2

in realtà non è necessario questa proprietà se si aggiunge '!' Ai pattern nella proprietà 'src', e questo è un pattern che può essere usato in qualsiasi altro compito da grugnito. http://gruntjs.com/configuring-tasks#globbing-patterns –

12

ho voluto escludere tutti.file GZ nella mia copia e questa opzione ha fatto il lavoro per tutte le cartelle

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

Quindi può essere provate !**/*.less, !gruntfile.js (senza parentesi)

2

partendo dal presupposto che 'Gruntfile.js' è nella directory principale, l'ultima riga le opzioni di copia sono configurate per copiare tutto in root su 'output /'.

Se ciò è previsto, aggiungere "! Gruntfile.js" alla serie di percorsi di file src.

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

riferimento a queste soluzioni da questo thread e original thread

Problemi correlati