2013-03-04 6 views
37

Ich habe die Grunt Aufgabe grunt-contrib-copy installiert. Ich habe es in meine Gruntfile.js eingebettet und die Aufgabe über grunt.loadNpmTasks('grunt-contrib-copy'); laden.Konfigurieren grunt Kopie Aufgabe zum Ausschließen von Dateien/Ordnern

Derzeit verwende ich folgende Konfiguration, um einen Ordner mit einer Teilmenge meiner Js-Dateien/Ordner zu erstellen.

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

Dies funktioniert gut, aber jedes Mal laufe ich grunzen kopieren Sie es mit der folgenden Fehlermeldung beendet:

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

I Gruntfile.js und alle *.less Dateien in js/**/* ausschließen möchten. Versuchte es mit !(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js) ... Aber nichts funktioniert. Hinzugefügt wurde es zum processContentExclude Array, aber auch ohne Erfolg. Wie kann ich die Gruntfile.js und alle weniger Dateien in der Ordnerstruktur js/**/* ausschließen?

Antwort

51

die Lösung gefunden:

Es besteht keine Notwendigkeit für diese Linien:

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

weil {expand: true, cwd: './', src: ['**'], dest: 'output/'} ist ein neuer Kopierschritt, Kopieren aller Dateien von ./ bis output. Das ist für mich nicht nötig, da die obigen Zeilen bereits die benötigten Dateien nach output/toolkit kopieren.

Also die folgenden zwei Zeilen erledigt den Job. Keine Notwendigkeit für Optionen oder irgendetwas anderes. Um die *.less Dateien '!**/*.less' herauszuhalten, macht die Arbeit.

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

Um Verzeichnisse wegzulassen, verwenden Sie '! Workingdir/omitted/**' – Ben

0

Ich denke, das sollte es tun. Nicht notwendig für . /** umfasst alle Dateien im Pfad und sein subdirs

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

Dank für Ihre Antwort, habe ich geändert/**/* zu/**, aber das tat es nicht hilft. Das Verhalten ist immer noch dasselbe. – mybecks

+0

Ich frage mich, ob Sie 'Gruntfile.js' von locaton' output/Gruntfile.js' ausführen. Wenn ja, führen Sie es bitte von einem anderen Ort aus oder schließen Sie es aus. –

+0

Meine letzte Zeile muss nicht mit {exapnd ...} beginnen. Nur die zwei {src ...} Zeilen werden benötigt. – mybecks

3

Wenn Sie haben die Freiheit, in eine andere Grunt Aufgabe zu ändern:

Es gibt auch https://github.com/clavery/grunt-copy-to, die eine explizite „ignorieren“ Option Dateien und Verzeichnisse angeben wegzulassen. Die README in Github zeigt eine Beispielkonfiguration mit Ignorieroptionen.

Es funktioniert ein bisschen anders als die normale Kopie, da es die Änderungszeiten ehrt. Aber das könnte tatsächlich willkommen sein (es war in meinem Fall).

Aus der Readme:

wie Grunzen-contrib-Kopie, sondern nur kopiert Dateien, die neuer sind und Zeiten für kopierte Dateien geändert aufrecht erhält. Nützlich zum Erstellen von Build-Verzeichnissen, die später mithilfe von Tools synchronisiert werden können, die sich auf Dateimodifizierungszeiten stützen.

(Ich bin nur ein Benutzer dieses Projekt (zumindest bisher).)

+2

Sie benötigen diese Eigenschaft eigentlich nicht, wenn Sie '' 'den Mustern in der 'src'-Eigenschaft hinzufügen, und dies ist ein Muster, das verwendet werden kann in jeder anderen grunzen Aufgabe. http://gruntjs.com/configuring-tasks#globbing-patterns –

12

ich alles ausschließen wollte.gz-Dateien in meiner Kopie und diese Option haben den Job für alle Ordner

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

Also !**/*.less, !gruntfile.js versuchen kann (keine Pars)

2

Unter der Annahme, dass ‚Gruntfile.js‘ im Root-Verzeichnis, die letzte Zeile in Ihre Kopieroptionen konfigurieren es so, dass alles in root auf 'output /' kopiert wird.

Wenn dies beabsichtigt ist, fügen Sie '! Gruntfile.js' zu Ihrem Array von src-Dateipfaden hinzu.

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

zu diesen Lösungen finden aus diesem thread und original thread