SoCompressor-JS與CSS本地批量壓縮、混淆、美化、格式化GUI工具.
前一段時間在寫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的兩個安裝包。
v1.0版本配幾張圖。
貼一段其中的處理程式碼:
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下載地址: 百度網盤