SoCompressor- JS脚本与CSS样式批量压缩、混淆、美化、格式化GUI工具.
本软件有以下几个特点:
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的两个安装包。
贴一段其中的处理代码:
[csharp] view plaincopypublic 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;
}
}