YUI Compressor是一个压缩js、css的工具,压缩后的文件几乎接近原文件的一半大小,该工具下载下来就是一个jar文件,它是用Java开发的,所以在运行的时候也是要依赖于jre环境,本文后面的介绍都是基于本机已经安装jre并且做好了配置的前提。
图1:yuicompressor help
上图是我在Windows的命令行中查看到的yuicompressor的一些命令的提示信息,翻译成中文如下:
语法: java -jar yuicompressor-x.y.z.jar [options] [input file]
通用参数:
-h, --help 显示帮助信息
--type <js|css> 指定输入文件的文件类型
--charset <charset> 指定读取输入文件使用的编码
--line-break <column> 在指定的列后插入一个 line-bread 符号
-v, --verbose 显示info和warn级别的信息
-o <file> 指定输出文件。默认输出是控制台。
javascript专用参数:
--nomunge 只压缩, 不对局部变量进行混淆。
--preserve-semi 保留所有的分号。
--disable-optimizations 禁止优化。 使用yuicompressor对js、css文件压缩的时候,首先将yuicompressor的jar文件下来下来,然后放在机器的某个位置(我下载的是yuicompressor-2.4.2.jar,放在的是C盘的根目录下,后面都是以此为例),然后就可以直接使用下面的命令对指定的文件进行压缩:
java -jar c:\yuicompressor-2.4.2.jar --type js --charset utf-8 d:\test01.js -o d:\test-min.js上面的代码就是实现的对D盘下的test01.js这个文件进行压缩,压缩后保存在原位置,命名为test-min.js。基于这个实现原理,我写了下面的Java代码,这样只要运行该Java代码的main方法,并且修改其中的一些参数,就可以很方便的实现对某个目录下的所有的js、css的递归循环压缩,也可以直接指定文件名进行指定文件的压缩。
代码如下:
import java.io.File;
import java.io.IOException;
import java.util.Date;
/**
* 工具类:利用yuicompressor来对js、css文件进行压缩
*
* @author YEDWARD
*
*/
public class CompressorUtil {
/**
* main方法
*
* @param args
*/
public static void main(String[] args) {
/**
* 压缩时,将这里的:
* yuiPath替换成你机器上yuicompress文件的路径;
* filePath替换成要压缩的文件或文件夹路径;
* fileType替换成要压缩的文件类型(扩展名),只能是js、css两种类型;
* encoding替换成你要读取文件的编码格式
*/
String yuiPath = "c:\\yuicompressor-2.4.2.jar";
String filePath = "E:\\workspace\\MYAPP\\WebContent\\app";
String fileType = "js";
String encoding = "utf-8";
StringBuilder sb = new StringBuilder();
File file = new File(filePath);
if (fileType.equalsIgnoreCase("JS")) {
compressJS(yuiPath, sb, file, encoding);
}
if (fileType.equalsIgnoreCase("CSS")) {
compressCSS(yuiPath, sb, file, encoding);
}
String[] res = sb.toString().split("/n");
Runtime runTime = Runtime.getRuntime();
Date startTime = new Date();
Long count = 0L;
for (String cmd : res) {
if (!cmd.trim().equals("")) {
System.out.println(cmd);
try {
runTime.exec(cmd);
count++;
} catch (IOException e) {
e.printStackTrace();
}
}
}
Date endTime = new Date();
Long cost = endTime.getTime() - startTime.getTime();
System.out.println(fileType.toUpperCase() + "压缩完成,耗时:" + cost + "ms,共压缩文件个数:" + count);
}
/**
* 压缩JS文件
*/
public static void compressJS(String yuiPath, StringBuilder sb, File f, String encoding) {
if (f.isDirectory()) {
File[] files = f.listFiles();
// 如果某个文件夹是空文件夹,则跳过
if (files == null) {
return;
}
for (File file : files) {
compressJS(yuiPath, sb, file, encoding);
}
} else {
String fileName = f.getName();
if (fileName.endsWith(".js") && !fileName.endsWith("-min.js")) {
sb.append("java -jar ");
sb.append(yuiPath);
sb.append(" --type js --charset ");
sb.append(encoding + " " + f.getPath());
sb.append(" -o " + f.getPath().replace(".js", "-min.js"));
sb.append("/n");
}
}
}
/**
* 压缩CSS文件
*/
public static void compressCSS(String yuiPath, StringBuilder sb, File f, String encoding) {
if (f.isDirectory()) {
File[] files = f.listFiles();
// 如果某个文件夹是空文件夹,则跳过
if (files == null) {
return;
}
for (File file : files) {
compressCSS(yuiPath, sb, file, encoding);
}
} else {
String fileName = f.getName();
if (fileName.endsWith(".css") && !fileName.endsWith("-min.css")) {
sb.append("java -jar ");
sb.append(yuiPath);
sb.append(" --type css --charset ");
sb.append(encoding + " " + f.getPath());
sb.append(" -o " + f.getPath().replace(".css", "-min.css"));
sb.append("/n");
}
}
}
}直接复制上面代码放到编译器中编译运行,并且按需替换掉main方法中的yuiPath、filePath、fileType、encoding即可,压缩需要一段时间,所有的文件都压缩成功后,会出现类似如下图2所示的结果:
图2:压缩完成提示
这样就OK了,记得要先下载yuicompressor.jar文件,保存到本机,并且记得修改上面代码中的几个参数,本文后面会提供一个yuicompressor-2.4.2.jar版本,这是目前最新的,建议以后使用时下最新的版本进行压缩。
YUI Compressor-2.4.2下载地址:
yuicompressor-2.4.2.zip
下面,愉快的开始压缩吧!
