2016-11-16 53 views
3

我想部署一個meanjs項目,但似乎無法弄清楚如何縮小,concat & uglify項目使用grunt。如何使用grunt uglify角度項目?

什麼我發現了迄今:

  1. 需要CONCAT ->運行ngAnnotate ->醜化(否則代碼將無法運行)
  2. 需要在依賴以CONCAT(否則它贏得't運行)

有了這個邏輯,我設法創建了一個單一的'uglified'版本的相關第三方庫(節點模塊),但我無法對模塊做同樣的事情,已經寫了。

我試過使用應該根據依賴關係重新排列文件的concat工具(grunt-concat-in-order,grunt-concat-dependencies,grunt-concat-deps),但沒有任何幫助。只是缺少模塊/聲明的錯誤。

我試過對應該連接的js文件進行重新排序,每次都有其他東西丟失,並且網站部分加載(最好)。 根據它們在編譯頭中出現的順序對文件重新排序不會有幫助。

是否有東西根據它們的依賴性或者我應該對其重新排序的一般邏輯連接Angular文件?

謝謝。

回答

1

找到了!顯然,JS和Angular靈活且缺少';'在模塊/指令聲明的最後。 我已經瀏覽了整個代碼並添加了缺失的';'在適當的地方。

例如:

angular.module('core').filter('xyz', [function() { 
    ..... 
}]) 

終於可以去睡覺了。

*原帖: Angular module().factory() is not a function after concat (gulp)(歡呼最大值亞日)

0

首先要檢查的是,實際上在代碼中隨處可見使用DI模式,因爲函數參數將在uglification期間被替換,因此不會再解析。

ControllerName.$inject = ['component'] 

或者

angular.module('module') 
    .controller(['module', function (module) { /*... */}) ; 

當你這樣做,請檢查您是否可以明確地指定文件順序是這樣的(僞代碼):

['module1_decl_file.js','module2_decl_file.js', '*.js','**/*.js']

+0

感謝您的輸入, 通過「明確的指定文件順序」你的意思是在這些文件被連接起來的順序?我推測concat函數按我寫的順序添加文件。 – Daniel

+0

它應該,是的。我還沒有嘗試完全使用你使用的庫,但吞嚥連接和類似。你有沒有嘗試連接它,而不是提高只是爲了驗證訂單?這可能是一個uglification參數替換錯誤。您的使用案例絕不是唯一的,可能是人們使用它的最常見方式。 –

+0

好吧, 我試過包括連接文件(沒有ngannotate/uglify版本),但它是一樣的...意思是順序是問題。 – Daniel