Webgrease Minify 是 ASP.NET MVC的CSS/JS打包壓縮功能
公文系統遇到一個雷
花上同仁很多時間找出問題點
值得紀錄
問題發生在正式環境上
因為debug模式下
js不會壓縮
所以並沒有發生問題
但經過js壓縮之後
許多變數都被簡化成a,b,c,d,e
於是在minify程式的編譯之下
發生了原本應該是在小scope裡的變數被提升到大scope裡去
而把大scope裡的變數取代掉了
EX:
if (condition) { function A() { } }
遇到這樣寫法的時候會把A提升至scope為local變數,
minify時變數名稱是以a,b,c,d.....流水下去命名,
若很不幸變數較多且原closure內有一樣的變數名稱,
就會被蓋過去造成執行階段的錯誤(可能minify時在改變數名稱的時候漏掉這個情境排除的判斷)
目前測試最簡單的改法為
if (condition) { var A = function () { } }
就能解決這個問題