http://www.cnblogs.com/rupeng/archive/2010/11/06/1870689.html
前两天看Dozer的博文《Visual Studio下的 JS & CSS 压缩和编辑插件》,感觉思路挺好,因为之前做过一阵子的VS插件开发,所以打算写一个出来。不过培训班的事情比较多,而且有两年没有碰VS插件开发了,一些细节忘了,所以利用周六没课的时间久开发了一个原始版本的出来。
安装包下载:http://files.cnblogs.com/rupeng/JSMinSetup20101106_bin.zip
源代码下载(需要安装VSSDK):http://files.cnblogs.com/rupeng/JSMin20101106_src.zip
由于是测试的版本,所以暂时只支持VS2008。安装后重启VisualStudio即可。在js文件上点右键可以在右键菜单看到“启用压缩”(请谅解我和春晚学的植入广告行为)
点击“启用压缩”即可,这样在js文件下就会折叠出现一个.min.js文件这个文件就是压缩后的js文件。
只要对js文件做任何的修改修改后min.js文件也会同步压缩。这样开发的时候页面引用min.js,然后编辑的时候编辑js文件即可。
源文件
压缩后的min.js文件
如果想取消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字符串
}
}
开发完成后打开VisualStudio主菜单“工具”→“选项”→“JSMin”,修改“JSMin压缩插件路径”选择压缩dll,然后“插件类全名”添加插件类的全名(命名空间+类名)即可。这样就是用你提供的压缩算法来进行压缩了,如果想恢复默认的压缩算法,将这两个选项清空即可。
YUI Compressor是一个非常棒的JS压缩工具,貌似JQuery都是用它压缩的,因此我感觉咱们没必要重新发明轮子,将YUI Compressor集成过来就可以,由于YUI Compressor是java开发的,因此集成到.net中比较麻烦,我有两个想法:
1、外调YUI Compressor,不过要求同时安装JDK,比较麻烦。
2、用IKVM将YUI Compressor编译成.net 的dll,这样就简单很多了,不过没研究过IKVM,最近事情也比较多,没精力做这件事,所以只能这里提供一个思路了。
高手写了更好用的压缩dll别忘了来这里分享给更多的朋友。
这个VisualStudio插件开发中的一些零散资料(假设VSSDK安装在C:\Program Files\Microsoft Visual Studio 2008 SDK):
1、制作安装包。
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)在安装项目上点击右键“生成”,就可以生成安装包了。
2、关于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”。
3、手动添加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
http://www.cnblogs.com/rupeng/archive/2010/11/06/1870689.html