SoCompressor-JS与CSS本地批量压缩、混淆、美化、格式化GUI工具.

来源:互联网 发布:mac win10 黑屏 编辑:程序博客网 时间:2024/05/21 06:59

SoCompressor已升级到2.0版本,需要的朋友可到 http://blog.csdn.net/tp7309/article/details/9799559 查看更新内容。


前一段时间在写web时自己写了几个JS文件用于前后台展示与交互,在后来要压缩js时发现基本都是带命令行的压缩工具,而且不能批量处理,在线压缩压缩完毕之后得一个个下,最可悲的是还需要自己重命名文件并且选择下载位置,太麻烦了。后来再网上搜了一下,发现这类GUI工具确定比较少,即使有功能也少的可怜(最无语的是有的出错不报,很郁闷),恰好最近想再练练winform,所以就萌生了自己写一个相关用途的小工具的想法,当然由于水平有限界面做的很难看,各位见谅,不过功能虽简单应该还是有一点实用价值的吧。

软件起了个名:SoCompressor,需要.Net Framework3.5的支持。


本小工具有以下几个特点:

1.压缩、混淆、美化、格式化都支持,断网条件下可以使用,软件不是使用的在线API.

1.支持批量操作,可以同时处理JS与CSS文件,可以多文件导入,多文件夹搜寻,当然直接复制代码进行操作也可。

2.可以选择对原文件的备份处理操作:如 “在各原文件所在目录新建名为"SoCompressor_backup"的文件夹并将原文件移到到此目录下”,"将原文件名附加标识".bak"以备份原文件“,移动到桌面,或者不进行处理等。

3.可以在备份目录下生成还原脚本。此还原脚本的作用不是压缩备份原文件,而是可以将最近一次用SoCompressor备份的原文件以其备份前的文件名还原到其各自的应有位置(有点绕。。)。

3.对输出文件的文件名可自定义附加标识,也有预设标识,如".min",则如果原文件名为a.js,那么输出文件的文件名则为a.min.js.

4.输出路径问题。有时候我们对不同目录下的文件一起压缩,这时候如果用传统的方法我们还得指定一个统一的输出路径,然后再将文件一个个导到其它地方,所以为了方便除了可以自定义输出路径外,也可以让输出文件与其各自对应的原文件位置相同。

5.支持多个处理引擎,目前添加了YUI Compressor与UglifyJS,如果后续有需要的话还会添加.各个处理引擎的详细参数设置在“设置”里面可以调整。关于UglifyJS:大家都知道如果要使用UglifyJS的话需要Node.js环境,所以我在软件里面加了处理引擎初始化,如果大家要使用UglifyJS而没有配置好的话,软件会自动配置Node.js环境与UglifyJS,这也是安装包颇大的原因,包含了Node.js在x86与x64的两个安装包。

配几张图。






贴一段其中的处理代码:

public class JSYUI:ISoCompressor    {        public string CompressionType { get; set; }        public bool DisableOptimizations { get; set; }        public bool IgnoreEval { get; set; }        public bool ObfuscateJavascript { get; set; }        public bool PreserveAllSemicolons { get; set; }        public FileInfoAndException Execute(string inFile, string outFile, Encoding encoding)        {            FileInfoAndException fe = new FileInfoAndException();            string strContent = "";         try            {                Yahoo.Yui.Compressor.JavaScriptCompressor jsCompressor = new Yahoo.Yui.Compressor.JavaScriptCompressor();                jsCompressor.Encoding = encoding;                Yahoo.Yui.Compressor.CompressionType ct1 = Yahoo.Yui.Compressor.CompressionType.Standard;                switch (CompressionType)                {                    case "Standard":                        ct1 = Yahoo.Yui.Compressor.CompressionType.Standard;                        break;                    case "None":                        ct1 = Yahoo.Yui.Compressor.CompressionType.None;                        break;                }                jsCompressor.CompressionType = ct1;                jsCompressor.DisableOptimizations = this.DisableOptimizations;                jsCompressor.IgnoreEval = this.IgnoreEval;   //大小写变换                jsCompressor.ObfuscateJavascript = this.ObfuscateJavascript;    //代码混淆                jsCompressor.PreserveAllSemicolons = this.PreserveAllSemicolons;   //保留所有分号                jsCompressor.ThreadCulture = System.Globalization.CultureInfo.CurrentCulture;                strContent = jsCompressor.Compress(System.IO.File.ReadAllText(inFile, encoding));                System.IO.File.WriteAllText(outFile, strContent);                fe.outFileInfo = new FileInfo(outFile);            }            catch (Exception e)            {                fe.strException = "处理文件时出错,错误原因:" + e.Message;  //此处在之后要改为捕捉具体的异常            }            return fe;        }        public bool Init()        {            return true;        }    }    public class CSSYUI:ISoCompressor    {        public string CompressionType { get; set; }        public bool RemoveComments { get; set; }        public FileInfoAndException Execute(string inFile, string outFile, Encoding encoding)        {            FileInfoAndException fe = new FileInfoAndException();            string strContent = "";            try{                Yahoo.Yui.Compressor.CssCompressor cssCompressor = new Yahoo.Yui.Compressor.CssCompressor();                Yahoo.Yui.Compressor.CompressionType ct1 = Yahoo.Yui.Compressor.CompressionType.Standard;                switch (CompressionType)                {                    case "Standard":                        ct1 = Yahoo.Yui.Compressor.CompressionType.Standard;                        break;                    case "None":                        ct1 = Yahoo.Yui.Compressor.CompressionType.None;                        break;                }                cssCompressor.CompressionType = ct1;                cssCompressor.RemoveComments = this.RemoveComments;                strContent = cssCompressor.Compress(System.IO.File.ReadAllText(inFile, encoding));                System.IO.File.WriteAllText(outFile, strContent);                fe.outFileInfo = new FileInfo(outFile);            }catch(Exception e)            {                fe.strException = "处理文件时出错,错误原因:" + e.Message;  //此处在之后要改为捕捉具体的异常            }            return fe;        }        public bool Init()        {            return true;        }    }

汗,今天刚发现发布的工具中少了点代码,已补上。

SoCompressor下载地址:
百度网盘

原创粉丝点击