2013-10-26 62 views
8

我正在使用grunt-usemin插件。我想知道下面如何做。grunt-usemin:定義自定義流程

我在index.html中有兩個usemin配置塊。

<!-- build:js /scripts/scriptsmin.js --> 
<script src="/scripts/jquery.min.js"></script> 
... 
... 
<!-- endbuild --> 

<!-- build:js /scripts/scripts.js --> 
<script src="/scripts/app.js"></script> 
.... 
... 
<!-- endbuild --> 

第一塊,scriptsmin.js,被縮小的文件。 二,scripts.js,包含需要縮小的所有文件。

我喜歡。

  1. 運行minifier(uglifyjs)第二塊
  2. 的concat與第二(步驟1)的縮小的版本第一塊

上是否有可能如果這些塊在同一文件中。我在flow上看到一段。無法關注我是否可以命名配置塊,並在其中設置單獨的流。它根據文件名稱(index.html)討論流程。我應該如何編寫grunt useminPrepare部分。

+0

你知道這是可能的與當前版本的grunt-usemin? – fischermatte

回答

0

只是想知道爲什麼你需要兩個單獨的目標爲您的JavaScript文件,特別是如果他們將被縮小爲&連接成一個文件。我會做的就是有一個腳本塊在文件的結尾,就像這樣:

<!-- build:js /scripts/scripts.js --> 
<script src="/scripts/jquery.min.js"></script> 
<script src="/scripts/app.js"></script> 
<!-- endbuild --> 

很容易理解這樣的,如果你所有的JS是一個塊,而不是兩個。 useminPrepare是一個基本上將Gruntfile配置更新爲包含用於腳本和樣式的concat,cssmin和uglify目標的任務。只需在具有構建註釋的文件中運行它就可以了。

useminPrepare: { 
    html: 'build/index.html' 
} 

usemin不應該看useminPrepare太不一樣了,但你想要做什麼,你會發現是一個文件「種子」 useminPrepare,如果包含相同的構建塊作爲HTML的其餘部分。因此實際usemin配置可以有幾個文件在那裏:

usemin: { 
    html: ['build/index.html', 'build/about.html', 'build/contact.html'] 
} 

useminPrepare運行後,再運行你的CONCAT,醜化和cssmin任務,然後最後運行usemin。所以你有這樣的自定義任務:

grunt.registerTask('build', ['useminPrepare', 'concat', 'uglify', 'cssmin', 'usemin']); 

希望這會有所幫助。

+0

感謝您的幫助。我有兩個塊的原因是,我保持縮小的外部庫(jquery,angular等)完好無損,但只是concat。我讀過它最好不要再通過經過良好測試的縮小文件再次運行minifier。所以我把它們放在一起。其他文件,如我的自定義js,需要縮小,然後與其他人連接。所以只有一個文件需要下載。抱歉不清楚這一點。你認爲這是有道理的,可能的。再次感謝 – bsr

+1

jQuery通過Uglify進行縮小(這樣看起來沒有什麼區別),Angular通過Google Closure(如果用Uglify再次壓縮,就不會有什麼區別); Uglify本身是一個經過測試的工具,如果您發現運行縮小文件時遇到任何問題,最好報告問題,然後我再次使用Uglify來縮小我加載的所有內容,而不管它是否已被縮小(通過RequireJS& r.js優化器),並沒有看到任何問題。唯一的缺點是明顯縮小代碼需要更多時間,但我懷疑是否有兩次運行min引起的錯誤。 – Ben

2

我有同樣的問題。如果你對兩個文件而不是一個滿意,你可以使用usemin here的分支。它使一些新的流動,即

  • libs2min
  • 無效
  • 刪除

full descriptions。所以你的HTML應該是:

<!-- build:libs2min /scripts/scriptsmin.js --> 
<script src="/scripts/jquery.js"></script> 
... 
... 
<!-- endbuild --> 

<!-- build:js /scripts/scripts.js --> 
<script src="/scripts/app.js"></script> 
.... 
... 
<!-- endbuild --> 

嵌套塊是不是一個好主意,現在不幸。但你可以嘗試一下。

要安裝叉,而不是常規的咕嚕,usemin的更改package.json爲使

"devDependencies": { 
    ... 
    "grunt-usemin": "Rauno56/grunt-usemin", 
    ... 
}, 

,並保持眼睛的主要回購 - 也許功能不是從到達那裏太遠。