2013-03-04 55 views
37

我已經安裝了grunt任務grunt-contrib-copy。我將它嵌入到我的Gruntfile.js中,並通過grunt.loadNpmTasks('grunt-contrib-copy');加載任務。配置grunt複製任務以排除文件/文件夾

目前我使用下面的配置來創建一個文件夾與我的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/'} 
       ] 
      } 
     } 

這工作得很好,但每次我運行咕嚕複製,出現以下錯誤消息退出:

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

我想排除js/**/*Gruntfile.js和所有*.less文件。嘗試與!(.less), !.less, !(*.less), !(./Grunfile.js), !(*Gruntfile.js) ...但沒有任何作品。將它添加到processContentExclude陣列中,但沒有成功。

那麼如何排除文件夾結構js/**/*中的Gruntfile.js和全部文件?

回答

51

找到了解決辦法:

沒有必要對這些行:

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

因爲{expand: true, cwd: './', src: ['**'], dest: 'output/'}是一個新的副本步,複製所有文件從./output。這對我來說不是必需的,因爲上述行已經將所需文件複製到output/toolkit

所以下面兩行就是這個工作。不需要選擇或其他任何東西。要阻止*.less文件'!**/*.less'完成這項工作。

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

要省略目錄,使用'!workingdir /省略/ **' – Ben 2014-05-21 18:31:01

0

我認爲這應該做到這一點。不需要/**/*/**覆蓋路徑中的所有文件及其子目錄

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

謝謝您的回答,我已經改變了/ **/*到/ **但這並沒有幫助。行爲仍然是一樣的。 – mybecks 2013-03-04 12:02:56

+0

只是想知道你是否正在'output/Gruntfile.js'中運行'Gruntfile.js'。如果是這樣,請從其他位置運行或排除它。 – 2013-03-04 20:08:10

+0

我不需要以{exapnd ...}開頭的最後一行。只需要兩條{src ...}行。 – mybecks 2013-03-05 11:16:49

3

如果你有自由更改爲不同的咕嚕任務:

還有https://github.com/clavery/grunt-copy-to它有一個明確的「忽略」選項來指定文件和目錄忽略。 Github中的README顯示了一個包含忽略選項的示例配置。

它與普通副本有點不同,因爲它支持修改時間。但這可能實際上是受歡迎的(這是我的情況)。

自述:

就像是更新和維護修改時間複製的文件咕嚕-contrib請複製,但只有複製文件。用於創建可以使用依賴文件修改時間的工具同步的構建目錄。

(我是該項目(至少到目前爲止)。只有用戶)

+2

如果您將'!'添加到'src'屬性中的模式,您實際上不需要此屬性,並且這是一種可以使用的模式在任何其他咕task任務。 http://gruntjs.com/configuring-tasks#globbing-patterns – 2013-09-27 21:27:09

12

我想排除所有。在我的副本GZ文件,這個選項做了工作的所有文件夾

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

所以可能會嘗試!**/*.less, !gruntfile.js(沒有括號)

2

假設「Gruntfile.js」是在根目錄下,最後一行您的複製選項將其配置爲將根中的所有內容複製到「輸出/」。

如果需要,請在您的src文件路徑數組中添加'!Gruntfile.js'。

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

參考這些解決方案從這個threadoriginal thread

相關問題