2012-03-16 66 views
8

我甚至不確定像我想要的東西是否可能,所以我要求你們讓我知道是否有人這樣做過。所以,我的目標是當我點擊VS2010中的「發佈」網站時,將所有JavaScript文件壓縮成一個,與CSS相同,然後在我的佈局文件中將所有不同js和css文件的引用更改爲僅這兩個合併那些。這是可行的嗎?或者,也許這是可行的,但以更人工的方式?在網站推送時壓縮.js和.css文件

當然,這裏的目標是在網站上只有兩個對外部文件的調用,但是當我開發時,我需要查看所有文件,以便我可以使用它。我想我可以在每次推送前手動完成,但我寧願使用腳本或其他東西自動完成。我還沒有嘗試任何東西,而且我也沒有尋找現成的解決方案,我只是希望更好地瞭解這個問題,也許還有一些提示。

非常感謝!

+1

請務必保留許可證頭在所有這些JS文件。 – 2012-03-16 13:52:11

回答

13

這是內置到ASP.net 4.5。但在此同時,你應該看看下面的項目

  • YUI Compressor
    • 這個項目的目標是壓縮任何JavaScript和層疊樣式表到該工程完全按照原來的源的效率水平,在它被縮小之前。
  • Cassette
    • 磁帶自動排序,會連接,minifies,高速緩存和版本的所有的JavaScript,CoffeeScript中,CSS,LESS和HTML模板。
  • RequestReduce
    • 超級簡單的自動拼合,縮小和捆綁解決方案
    • 沒有必要告訴RequestReduce您的資源是
    • 你的CSS和Javascript可以在任何地方 - 甚至是外部主機
    • RequestReduce在運行時自動發現它們
  • SquishIt
    • SquishIt讓你壓扁一些JavaScript和CSS。還有一些LESS和CoffeeScript。
  • Combres
    • .NET庫,能夠縮小,壓縮,合併,和JavaScript的緩存和CSS資源ASP.NET和ASP.NET MVC的Web應用程序。簡而言之,它可以幫助您的應用程序在YSlow和PageSpeed上更上一層樓。
  • Chirpy
    • 搗爛,minifies,並驗證你的JavaScript,樣式表,和帶點文件。 Chirpy還可以自動更新T4MVC和其他T4模板。

斯科特Hanselman的寫a good overview blog post這個話題而回。

+0

因爲它已經在使用RAZOR,所以我會和Casette一起去。謝謝! – 2012-03-16 16:57:40

0

我不知道是否有任何可能的方式以某種方式掛鉤到「發佈」按鈕的功能/不管它是什麼,但它肯定有可能有這種'靜態構建過程'。

就我個人而言,我使用Apache ANT來描述您在那裏描述的內容。因此,您正在開發未壓縮的js/html/css文件,當您完成後,您會調用像ant build,然後縮小,壓縮,條紋併發布您的整個Web應用程序。

示例腳本:https://github.com/jAndreas/typeof-NaN-2.0/blob/master/build/build.xml

1

我還沒有聽說過發佈縮小。我認爲使用應該選擇像SquishIt這樣的動態縮減或者像YuiCompressor或AjaxMinifier那樣的編譯時間。

我更喜歡編譯時間。我不認爲編譯時間更改文件是非常重要的。如果你有大量的css/js代碼行,你可以選擇這個動作只用於發佈編譯,以及它是否有助於僅在需要的構建cinfigurations中發佈這些文件。

3

我投了,所提到錄像帶的答案,但我會的細節,特別是選擇多一點。磁帶是相當配置的,但在最常見的選擇,它可以讓你通過語法引用CSS和Javascript資源這樣的:

Bundles.Reference("Scripts/aFolderOfScriptsThatNeedsToLoadFirst", "first"); 
Bundles.Reference("Scripts/aFolderOfScripts"); 
Bundles.Reference("Styles/aFolderOfStyles"); 

這樣,你會在你的主人或佈局頁像這樣使這些:

@Bundles.RenderStylesheets() 
@Bundles.RenderScripts("first") 
@Bundles.RenderScripts() 

在開發過程中,你的腳本和樣式將作爲單獨的文件,磁帶將嘗試通過檢測變化和試圖使瀏覽器重新加載這些文件來幫助你。這種方法非常適用於像淘汰賽這樣的庫,當他們正在做你不期望的事情時。而且,最好的部分是,當您啓動網站時,您只需更改web.config並且Cassette會縮小並將所有文件捆綁到儘可能少的捆綁包中。

你可以找到它們的文檔更詳細(這是相當不錯的,雖然有時會滯後於發展):http://getcassette.net/documentation/getting-started

+0

(我問過一個類似的問題,SO相同)你知道,如果盒可以在發佈時工作,所以有縮小的唯一資產部署的站點?謝謝 – superjos 2013-03-20 18:45:06

+0

是超級用戶,只需在web.config中將'debug'設置爲'false':http://getcassette.net/documentation/v2/web-config – Milimetric 2013-03-20 21:15:09

+0

感謝您的快速回復!我無法從文檔中得知,但是對於我來說這聽起來像是* runtime * minification,也就是說資產在Web服務器上清楚地部署,並且在請求的頁面上,資產被縮小並通過線路發送(並且頁面引用縮小束)。 我所追求的是在* publish * -time縮小,所以要有一個只有縮小資產的可部署包。因此,所有參考文件的縮小和更改都會在那一刻發生。 – superjos 2013-03-21 12:08:44