2013-03-04 12 views
37

Zainstalowałem zadanie pomruczania grunt-contrib-copy. Umieściłem go w moim Gruntfile.js i załadowałem zadanie przez grunt.loadNpmTasks('grunt-contrib-copy');.Konfigurowanie zadania kopiowania tekstu w celu wykluczenia plików/folderów

Obecnie używam następującej konfiguracji, aby utworzyć folder z podzbiorem moich plików/folderów 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/'} 
       ] 
      } 
     } 

Działa to dobrze, ale za każdym razem uruchomić grunt skopiować wysuwanego z następującym komunikatem o błędzie:

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

chciałbym wykluczyć Gruntfile.js i wszystkie *.less pliki js/**/*. Próbowałem go z !(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js) ... Ale nic nie działa. Dodano ją do tablicy processContentExclude, ale bez powodzenia.

Jak mogę wykluczyć Gruntfile.js i wszystkie mniej pliki w strukturze folderów js/**/*?

Odpowiedz

51

Znaleziono rozwiązanie:

Nie ma potrzeby dla tych linii:

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

ponieważ {expand: true, cwd: './', src: ['**'], dest: 'output/'} to nowy krok kopiowanie, kopiowanie wszystkich plików od ./ do output. To nie jest dla mnie potrzebne, ponieważ powyższe linie już teraz kopiują wymagane pliki do output/toolkit.

Tak więc poniższe dwie linie wykonują zadanie. Nie potrzebujesz opcji ani niczego innego. Aby zapobiec wykonywaniu zadania, należy wykonać jedno z następujących czynności: *.less.

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

Aby pominąć katalogów użyć '! WorkingDir/pominięty/**' – Ben

0

Sądzę, że to powinno wystarczyć. Nie ma potrzeby dla /**/*. /** obejmuje wszystkie pliki w ścieżce i jego subdirs

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

dzięki za odpowiedź, Zmieniłem/**/* do/**, ale to nie pomaga. Zachowanie jest wciąż takie samo. – mybecks

+0

Zastanawiasz się, czy używasz 'Gruntfile.js' z lokalizacji' output/Gruntfile.js'. Jeśli tak, uruchom go z innej lokalizacji lub wyklucz. –

+0

Nie ma potrzeby, by moja ostatnia linia zaczynała się od {exapnd ...}. Potrzebne są tylko dwie linie {src ...}. – mybecks

3

Jeśli masz wolność, aby przejść do innego zadania Grunt:

Istnieje również https://github.com/clavery/grunt-copy-to który ma wyraźną możliwość określenia plików i katalogów do pominięcia „ignoruj”. README w Github pokazuje przykładową konfigurację zawierającą opcje ignorowania.

Działa nieco inaczej niż zwykła kopia, ponieważ uwzględnia czasy modyfikacji. Ale to może być naprawdę mile widziane (w moim przypadku).

Od README:

Jak Grunt-contrib-Copy ale tylko kopie plików, które są nowsze i utrzymuje zmodyfikowanych razy dla kopiowanych plików. Przydatne przy tworzeniu katalogów kompilacji, które można później synchronizować przy użyciu narzędzi, które polegają na czasach modyfikacji pliku.

(jestem tylko użytkownik tego projektu (przynajmniej do tej pory).)

+2

rzeczywiście nie trzeba tę właściwość, jeśli dodać '!' Do wzorców w 'własności src', i jest to wzór, który może być używany w każdym innym zadaniu gruntowym. http://gruntjs.com/configuring-tasks#globbing-patterns –

12

chciałem wykluczyć wszystko.Pliki GZ w moim egzemplarzu i ta opcja nie praca dla wszystkich folderów

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

Więc może spróbuj !**/*.less, !gruntfile.js (bez nawiasów)

2

Zakładając, że „Gruntfile.js” znajduje się w katalogu, w ostatnim wierszu w twoimi opcjami kopiowania jest skonfigurowanie go tak, aby kopiował wszystko z korzenia na "wyjście /".

Jeśli jest to zamierzone, dodać 'Gruntfile.js! Na swojej tablicy ścieżek plików src.

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

Patrz tych rozwiązań od tych thread i original thread

Powiązane problemy