您的位置:首页 > 产品设计 > UI/UE

使用yuicompressor.jar对js/css文件代码压缩

2015-11-28 13:54 671 查看




文章链接:使用yuicompressor.jar对js/css文件代码压缩


介绍

YUI Compressor是一个压缩js、css的工具,原文件越大 可被压缩的部分就越大,压缩后的文件几乎是原文件大小的一半,该工具下载下来是一个jar文件,因此其运行是需要依赖jre环境的,因此在使用该工具前请先配置好环境。


Cmd命令

如果你习惯使用cmd命令来运行jar,那么下边的YUI Help可能对你会有很大的帮助。



命令:java –jar c:\yuicompressor-2.4.2.jar

我将yuicompressor.jar文件放在了C盘的根目录下,具体可以按照你的使用习惯去放置该文件,另外我用的版本是2.4.2。
使用yui对js/css进行压缩的时候,需要输入以下命令对指定的文件进行压缩:

翻译如下:

通用参数:

-h -–help                                 显示帮助信息

--type<js|css>                       指定输入文件的文件类型

--charset<charset>               指定读取输入文件使用的编码

--line-break<column>          在指定的列后插入一个line-bread符号

-v –verbose                            显示info和warn级别的信息

-o<file>                                   指定输出文件,默认输出的控制台

Javascript专用参数:

--nomunge                             只压缩,不对局部变量进行混淆

--preserve-semi                    保留所有的分号

--disable-optimizations        禁止优化

Java –jar c:\yuicompressor-2.4.2.jar –-type js –-charset utf-8

D:\test.js –o d:\test-min.js

在该段命令中,第二行的输出路径需要按照自己的习惯自行替换,另外该段命令按照上边YUI Help可以翻译成:

我想在jre环境下运行叫yuicompressor-2.4.2的jar文件,文件类型为js,使用utf-8编码格式,将位于D盘根目录下的test.js文件压缩到同一目录下,但是名字叫做test-min.js。


Java Project

如果你已经厌烦了cmd命令行,那么你可以使用java project的方式。

首先创建一个java项目,在项目中导入如下代码:

import java.io.File;
import java.io.IOException;
import java.util.Date;

/**
* 工具类:利用yuicompressor来对js、css文件进行压缩
*
* @author Derien
*
*/
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 = "D:\\YUI";
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");
}
}
}
}


具体的变量参数请按照我上边的注释针对实际情况进行修改。

这种方法支持多文件的压缩,可以将需要进行压缩的文件全部放到一个目录文件夹下,对该文件夹下的文件进行压缩,切记每次执行仅支持同一类型的文件压缩。

更多文章,请查阅我的个人博客:De Rien

点击下载:yuicompressor-2.4.2.jar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  yui 压缩 java css javascript