2012-11-15 74 views
4

不知道我是否遺漏了一些東西,但是我有以下針對grunt-contrib-copy任務的grunt設置。使用Grunt Copy任務時文件樹展平任務

copy: { 
    build: { 
    files: { 
     "server-dist/": "server/**/*.!(coffee)", 
     "client-dist/": "client/**/*.!(coffee)" 
    } 
    } 
} 

客戶-dist的副本如我所料,通過遞歸文件樹運行,但服務器-dist的所有子文件夾得到夷爲平地,基文件夾。任何想法爲什麼發生這種情況?這裏是在I/O

server/ 
    views/ 
    errors/ 
     404.jade 
    layouts/ 
     base.jade 

變得

server/ 
    errors/ 
    layouts/ 
    base.jade 

意見文件夾得到完全吹出。還有一件事......當我將咖啡移除時(咖啡)它可以正常工作,但我需要排除咖啡文件,因爲我正在運行一個grunt-coffee手錶任務。

回答

2

顯然,grunt-contrib-copy任務具有正試圖自動檢測複製源文件的基本目錄一個複雜的邏輯(見related issue

解決的辦法是明確指定basePath選項:

copy: { 
    build: { 
    files: { 
     "server-dist/": "server/**/*!(.coffee)" 
    }, 
    options: { 
     basePath: 'server' // base directory in the source path 
    } 
    } 
} 

PS但是,我不確定爲什麼刪除!(.coffee)會改變您的行爲。我想我的本地計算機上的相同,得到相同的結果指定"server/**/*"代替"server/**/*.!(coffee)"(即views文件夾跳過)時

+0

太棒了!這有效,但還有一件事...在我的例子中,有兩個basePaths服務器+客戶端。我寧願沒有兩個單獨的複製任務buildServer + buildClient ...我會做,如果我必須但有另一種方式。謝謝。 – imrane

+0

對不起,我沒有看到一種方法可以用當前的任務執行。您可能想在我的答案中鏈接的問題中與貢獻者交談... –

+0

ok - 聽起來不錯 - 謝謝 – imrane

8

後隨到Zacks的評論:

copy: { 
    mytask: { 
     files: [ 
     {expand:true, cwd:'dev-js/abc/', dest:'js/test/', src:['def.js']} 
     ] 
    } 
} 

這將文件複製./dev-js/abc/def.js./js/test/def.js - 至少在我的0.4.1版本。 Zacks評論和包括的鏈接是非常有用的,特別是事實,basePath已被取代。

+0

我沒有想到複製文件需要花費幾個小時才能弄清楚,但是哦,至少這幫助了我。 – Svend

+0

@Svend給男人一條魚...... –