ASP.NET MVC的CSS/JS打包壓縮功能,背後靠的是WebGrease開源元件,而WebGrease還提供MSBuild支援及工具程式--wg.exe方便應用。
前篇文章AppScriptsHandler用來壓縮JavaScript的Microsoft.Ajax.Utilities.Minifier,便是來自WebGrease的元件,這篇文章則談談如何將wg.exe複製到Server上執行。
文件提到wg.exe會隨Visual Studio一併安裝,使用Visual Studio命令提示字元就能直接執行(This tool is automatically installed with Visual Studio. To run the tool, we recommend that you use the Visual Studio Command Prompt.),但試過手邊的機器(有裝VS2012及VS2013),均無法直接從VS Command Prompt啟動(文件有誤?),只能自力救濟。
開啟用NuGet安裝過WebGrease套件的專案資料夾,找到以下檔案:
packages\Antlr.3.4.1.9004\lib\Antlr3.Runtime.dll
packages\Newtonsoft.Json.5.0.*\lib\40\Newtonsoft.Json.dll
packages\WebGrease.1.6.0\lib\WebGrease.dll
packages\WebGrease.1.6.0\tools\WG.exe
將這四個檔案複製在同一資料夾部署到伺服器,即可執行wg.exe壓縮或打包JavaScript及CSS。列舉常用語法如下:
wg.exe -m -in:d:\src_folder -out:d:\dst_folder
將d:\src_folder\所有.js檔壓縮成.min.js後寫入d:\dst_folder
wg.exe –m -in:d:\src_folder\boo.js -out:d:\dst_folder\boo.min.js
將d:\src_folder\boo.js壓縮後寫入d:\dst_folder\boo.min.js
將d:\src_folder\的所有.js檔壓縮打包成單一檔案寫入d:\dst_folder\packed.min.js
【補記】一開始用WebGrease 1.5版測試,發現以下Bug
當命令列視窗現有路徑被設成wg.exe所在資料夾,執行時出現不明錯誤;但只要將當下路徑改成wg.exe所在目錄以外的任何目錄,就可正常正常。本想追進原始碼射茶包,發現問題在1.6版已消失,因茶包已自盡改以不起訴結案。