ASP.NET MVC 中有個 BundleConfig 用於靜態資源的打包和壓縮,我在使用的過程當中遇到一些問題,如今作下總結,並給出具體的解決方案。javascript
// Styles. bundles.Add(new StyleBundle("~/bundles/styles/site.css").Include("~/static/styles/site.css")); // Scripts. bundles.Add(new ScriptBundle("~/bundles/scripts/index.js").Include("~/static/scripts/index.js"));
仔細看其中一條錯誤信息,說找不到 /bundles/images/bgi.jpg
,可是這個圖片實際在 /static/images
中。很明顯就能看出來:若是訪問路徑和真實路徑不一致,則 JavaScript 和 CSS 中的相對路徑所有會悲劇。css
因此解決方案有如下兩種:java
第一種解決方案可行,但很難保證團隊內成員不在 JavaScript 和 CSS 中使用相對路徑,同時也增長團隊內成員的開發壓力,因此我採用的是第二種解決方案,但隨之而來的是第二個問題:code
// Styles. bundles.Add(new StyleBundle("~/static/styles/site.css").Include("~/static/styles/site.css")); // Scripts. bundles.Add(new ScriptBundle("~/static/scripts/index.js").Include("~/static/scripts/index.js"));
文件路徑一致,文件名稱也一致,打包和壓縮都失效。猜測多是訪問到了真實的文件,將訪問路徑的文件名改了後又試了試,果真是這樣。因此解決方案很簡單:避免訪問地址和真實地址一致便可。圖片
貼一下修改後的代碼:ip
// Styles. bundles.Add(new StyleBundle("~/static/styles/site").Include("~/static/styles/site.css")); // Scripts. bundles.Add(new ScriptBundle("~/static/scripts/index").Include("~/static/scripts/index.js"));