全自动时代:JavaScript自动压缩插件

前两天看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

相关文章
相关标签/搜索