前兩天看Dozer的博文《Visual Studio下的 JS & CSS 壓縮和編輯插件》,感受思路挺好,由於以前作過一陣子的VS插件開發,因此打算寫一個出來。不過培訓班的事情比較多,並且有兩年沒有碰VS插件開發了,一些細節忘了,因此利用週六沒課的時間久開發了一個原始版本的出來。
安裝包下載:http://files.cnblogs.com/rupeng/JSMinSetup20101106_bin.zip
源代碼下載(須要安裝VSSDK):http://files.cnblogs.com/rupeng/JSMin20101106_src.ziphtml
因爲是測試的版本,因此暫時只支持VS2008。安裝後重啓VisualStudio便可。在js文件上點右鍵能夠在右鍵菜單看到「啓用壓縮」(請諒解我和春晚學的植入廣告行爲)java
點擊「啓用壓縮」便可,這樣在js文件下就會摺疊出現一個.min.js文件這個文件就是壓縮後的js文件。jquery
只要對js文件作任何的修改修改後min.js文件也會同步壓縮。這樣開發的時候頁面引用min.js,而後編輯的時候編輯js文件便可。算法
源文件編輯器
壓縮後的min.js文件ide
若是想取消js文件的自動壓縮,只要再在js文件上點右鍵,取消「啓用壓縮」的勾選就能夠了。工具
因爲對JS壓縮算法不是很熟悉,所以我將CSDN上chinarenhcw開發的JS Minifier(http://download.csdn.net/source/2699409)的壓縮算法反編譯了拿來用,對這種未經原做者贊成的逆向工程行爲表示抱歉,chinarenhcw兄弟若是看到這篇文章不知道有沒有興趣一塊兒開發這個插件。測試
chinarenhcw的壓縮算法只是進行了空行等的處理,沒有進行變量重命名等進一步的壓縮,爲了發揮社區的力量,我將這個插件提供了一個擴展的機制,對JS壓縮算法比較熟悉的朋友能夠編寫壓縮算法,而後即便不懂VSX開發業不要緊,只要提供一個dll便可。網站
大致步驟以下:建立一個類庫項目,類庫中包含一個public類,類中提供一個方法名爲JsMin的public方法,方法包含一個string類型參數和一個string類型返回值,參數爲壓縮前的js字符串,返回值爲壓縮後的字符串,例如
class Minifier
{
public string JsMin(string js)
{
return js.Replace(" ","");//壓縮js字符串
}
}this
開發完成後打開VisualStudio主菜單「工具」→「選項」→「JSMin」,修改「JSMin壓縮插件路徑」選擇壓縮dll,而後「插件類全名」添加插件類的全名(命名空間+類名)便可。這樣就是用你提供的壓縮算法來進行壓縮了,若是想恢復默認的壓縮算法,將這兩個選項清空便可。
YUI Compressor是一個很是棒的JS壓縮工具,貌似JQuery都是用它壓縮的,所以我感受我們不必從新發明輪子,將YUI Compressor集成過來就能夠,因爲YUI Compressor是java開發的,所以集成到.net中比較麻煩,我有兩個想法:
一、外調YUI Compressor,不過要求同時安裝JDK,比較麻煩。
二、用IKVM將YUI Compressor編譯成.net 的dll,這樣就簡單不少了,不過沒研究過IKVM,最近事情也比較多,沒精力作這件事,因此只能這裏提供一個思路了。
高手寫了更好用的壓縮dll別忘了來這裏分享給更多的朋友。
這個VisualStudio插件開發中的一些零散資料(假設VSSDK安裝在C:\Program Files\Microsoft Visual Studio 2008 SDK):
一、製做安裝包。
1)添加一個「安裝項目」
2)在安裝項目上點擊右鍵,選擇「添加」→「項目輸出」,選擇插件項目
3)命令行進入C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\Tools\Bin,而後運行
regpkg /root:Software\Microsoft\VisualStudio\9.0 /regfile:ItcastJSMin.reg /codebase D:\個人文檔\MyCode\VS插件開發\JS壓縮\ItcastJSMin\bin\Debug\ItcastJSMin.dll
其中ItcastJSMin.reg 爲生成的註冊表文件,D:\個人文檔\MyCode\VS插件開發\JS壓縮\ItcastJSMin\bin\Debug\ItcastJSMin.dll 爲插件項目生成的dll,注意要寫全路徑,不要寫相對路徑,不然可能會報錯「regpkg : error : 無效的 URI: 沒法肯定 URI 的格式」(參考 http://www.cnblogs.com/ApolloSun/archive/2010/02/25/1673665.html)。
4)將生成的ItcastJSMin.reg用文本編輯器打開,將其中的「D:\\個人文檔\\MyCode\\VS插件開發\\JS壓縮\\ItcastJSMin\\bin\\Debug\\」替換成「[TARGETDIR]」,將「C:\\WINDOWS\\system32\\」替換成「[SYSTEMFOLDER]」這樣由安裝項目在安裝時將reg中的路徑替換爲安裝的路徑。保存時注意編碼要爲Unicode。
5)在安裝項目上點擊右鍵,選擇「視圖」→「註冊表」,而後在「目標計算機上的註冊表」上點擊右鍵,選擇「導入」,導入上面修改後的ItcastJSMin.reg。
7)通常須要在安裝了插件後運行「devenv.exe /setup」來確保插件安裝,因此代碼中添加了DevenvSetupCustomAction。
8)在安裝項目上點擊右鍵「生成」,就能夠生成安裝包了。
二、關於PLK
安裝VSSDK之後開發的VSPackage使用開發人員的PLK,若是想製做安裝包讓沒有安裝VSSDK的人也能安裝的話須要到微軟網站上(http://msdn.microsoft.com/en-us/vsx/cc655795.aspx)申請PLK,注意申請時的產品名、公司名不能含有中文和空格;這個產品名、公司名必須和VSPackage中ProvideLoadKey中使用的產品名、公司名一致。
申請到PLK之後在插件項目中建立一個資源文件(resx),而後在文件中添加一個字符串資源,名稱爲1(任意,只要和後面一致就能夠),值爲申請到的PLK。
而後在VSPackage上添加「[ProvideLoadKey("Standard", "1.0", "JSMinPackage", "Itcast", 1)]」,其中,1表示在Resource.resx中名字爲1的爲PLK。"Standard"、"1.0"、 "JSMinPackage"、"Itcast"爲VS版本、插件版本、插件名稱、公司名,必須和PLK申請時填寫的一致。
在VisualStudio啓動的時候添加「/NoVSIP」選項就能夠測試插件在沒有VSSDK的機器上是否能正確運行「devenv.exe /NoVSIP」。
三、手動添加vsct文件的方法
參考以下文章:
http://www.cnblogs.com/ApolloSun/archive/2010/02/25/1673483.html
http://social.msdn.microsoft.com/Forums/en/vsx/thread/4bcceb62-abe6-4c9e-9f39-826857c9aadb