使用Ant和YUICompressor链接合并压缩你的JS和CSS代码

JS代码和CSS代码在上线前要压缩大家应该都是知道的了。记得之前做项目的时候,最后要交差的时候是找了个网站,将JS代码的文件一个一个地复制,粘贴,复制,粘贴。

当时就在想:TMD有没有好一点的方法,劳资不想老是用Ctrl大法。啊啊啊啊啊啊啊啊阿~。最最坑爹的是,有时候将代码复制粘贴的时候手一抖可能就删了点什么东西,手一快又保存了,反正各种坑爹。坑到没朋友。

但是呢,不压缩也不是是吧?



在写JS代码渐渐多了起来的时候就发现手动压缩根本不是长远的方法。而且JS的代码也开始分块,分功能,分文件写了,尽量去做到复用。

在实际项目中,推荐的是一个html对应一个JS文件和一个CSS文件。这样做可以减少HTTP请求,众所周知,一个HTTP请求的延迟远比下载一个大点的文件大得多。

所以从

程序员来看:我要分文件,分模块写。不然代码太混乱了。(多文件)

客户(网站的使用者)来看:我要良好的用户体验,越快越好。(少文件,文件一多HTTP请求会很多)

这就产生了冲突,不过有需求就有市场,我们聪明的前端攻城狮也有自己的方法解决。——链接文件与压缩大法,也就是标题“使用Ant和YUICompressor链接合并压缩你的JS和CSS代码”。



Ant,中文翻译过来就是“蚂蚁”。嗯嗯这是Apache的一个项目,基于Java的build工具,可以将一些项目的代码文件合并或者复制。具体的东东可以自行Google或者Baidu

官网:http://ant.apache.org/

YUICompressor,雅虎公司的一个代码压缩工具,貌似压缩比例也挺高的。网上一搜一堆的在线压缩网站有的也是这个做得。也是基于Java的。



第一步:配Java环境

这一步就跳过吧,这么简单是吧?Ant和YUICompressor都是基于Java来做得,不懂得自行Google或者Baidu,这里说的是环境变量那里的配置。不是Eclipse里面的。嗯我知道你们想到了-_-!!。估计很多都配过了就不多说了。



第二步:创建项目

Eclipse下创建一个新的项目,Dynamic Web Project。打开Project Explorer窗口(window->show View)

如图所示,我建立了一个AntTest项目,然后在WebContent下面建立了三个文件夹,

  1. build 这个文件夹是用来放链接合并和压缩工具的
  2. build_output 这个文件夹是用来放项目上线的前端代码和页面的
  3. web 这个是用来放一些代码的各个未链接压缩的部分的,平常编辑代码的话就在这个文件夹下面编辑和修改


第三步:创建具体文件

这张图是web文件夹下面的具体的文件模块,其实jQuery有一些模块没用到的话可以拆开加载的。



第四步:放置工具文件到build文件夹里面

这是Ant和YUICompressor的文件夹。直接解压放里面就可以。

Ant的话也要配环境的,比如下面的

ANT_HOME    D:/ apache-ant-1.9.0

path             D:/ apache-ant-1.9.0/bin

classpath      D:/apache-ant-1.9.0/lib

具体的路径放的不一样每台电脑都不同,可以看http://jingyan.baidu.com/article/e2284b2b45d193e2e6118dc6.html或者自行解决。



第五步:设置配置文件build.xml

我们这里是用

  1 <?xml version="1.0" encoding="UTF-8"?>
  2
  3 <project default="compress" basedir="D:\eclipseWorkSpace\AntTest\WebContent\web" name="core">
  4     <!-- 项目的 web 路径,也就是我们修改代码的那个web文件夹的路径 -->
  5     <property name="path" value="D:\eclipseWorkSpace\AntTest\WebContent\web" />
  6     <!-- 部署的输出路径 也就是项目的链接合并压缩的输出文件夹的路径-->
  7     <property name="targetDir" value="D:\eclipseWorkSpace\AntTest\WebContent\build_output\asset" />
  8     <!-- 源文件路径(src) -->
  9     <property name="code.src" value="src" />
 10     <property name="baseService" value="baseService" />
 11     <!-- !!! YUI Compressor 路径 !!! -->
 12     <property name="yuicompressor" value="D:\eclipseWorkSpace\AntTest\WebContent\build\yuicompressor-2.4.6\yuicompressor-2.4.6\build\yuicompressor-2.4.6.jar"/>
 13
 14     <!-- =================================
 15          target: concat 拼接(合并)文件
 16     ================================= -->
 17
 18     <target name="concat" depends="" description="concat code">
 19         <echo message="Concat Code Files Begin!!!" />
 20         <!-- 需要注意这里的拼接顺序depends是优先链接合并的文件,也就是依赖的意思 --><!-- JS -->
 21         <concat destfile="${targetDir}/js/source/all.js" encoding="utf-8" fixlastline="on">
 22             <fileset dir="${code.src}/js" includes="jquery-1.5.1.js" />
 23             <fileset dir="${code.src}/js" includes="jquery.ui.core.js" />
 24             <fileset dir="${code.src}/js" includes="jquery.ui.widget.js" />
 25             <fileset dir="${code.src}/js" includes="jquery.ui.draggable.js" />
 26             <fileset dir="${code.src}/js" includes="jquery.ui.droppable.js" />
 27             <fileset dir="${code.src}/js" includes="jquery.ui.button.js" />
 28             <fileset dir="${code.src}/js" includes="jquery.ui.dialog.js" />
 29             <fileset dir="${code.src}/js" includes="jquery.ui.accordion.js" />
 30             <fileset dir="${code.src}/js" includes="jquery.ui.autocomplete.js" />
 31         </concat>
 32         <!-- CSS -->
 33         <concat destfile="${targetDir}/css/source/all.css" encoding="utf-8">
 34             <fileset dir="${code.src}/css" includes="jquery.ui.core.css" />
 35             <fileset dir="${code.src}/css" includes="jquery.ui.button.css" />
 36             <fileset dir="${code.src}/css" includes="jquery.ui.dialog.css" />
 37             <fileset dir="${code.src}/css" includes="jquery.ui.accordion.css" />
 38             <fileset dir="${code.src}/css" includes="jquery.ui.autocomplete.css" />
 39         </concat>
 40
 41         <echo message="Concat Code Files Finished!!!" />
 42     </target>
 43
 44     <!-- =================================
 45           target: copy 拷贝文件
 46          ================================= -->
 47
 48     <target name="copy_asset" depends="concat" description="copy the asset file">
 49         <echo message="Copy Asset Begin" />
 50         <!-- main.html -->
 51         <copy todir="${targetDir}/../" overwrite="true">
 52             <fileset dir="${path}/" includes="*.html"/>
 53         </copy>
 54         <!-- img *.png -->
 55         <copy todir="${targetDir}/img" overwrite="true">
 56             <fileset dir="${path}/asset/img" includes="*.png" />
 57         </copy>
 58
 59         <echo message="Copy Asset Finished" />
 60     </target>
 61
 62
 63     <!-- =================================
 64           target: compress 压缩 js && css
 65          ================================= -->
 66
 67     <target name="compress" depends="copy_asset" description="compress code">
 68         <echo message="Compress Code Begin" />
 69
 70         <apply executable="java" parallel="false" failonerror="true" dest="${targetDir}/js">
 71             <fileset dir="${targetDir}/js/source" includes="*.js"/>
 72             <arg line="-jar"/>
 73             <arg path="${yuicompressor}" />
 74             <arg line="--charset utf-8" />
 75             <arg line="-o" />
 76             <targetfile/>
 77             <mapper type="glob" from="*.js" to="*.js" />
 78         </apply>
 79
 80         <apply executable="java" parallel="false" failonerror="true" dest="${targetDir}/css">
 81             <fileset dir="${targetDir}/css/source" includes="*.css"/>
 82             <arg line="-jar"/>
 83             <arg path="${yuicompressor}" />
 84             <arg line="--charset utf-8" />
 85             <arg line="-o" />
 86             <targetfile/>
 87             <mapper type="glob" from="*.css" to="*.css" />
 88         </apply>
 89
 90         <echo message="Compress Code Finished" />
 91
 92         <echo message="Clean Begin" />
 93
 94         <!--<delete verbose="false" failonerror="true">
 95             <fileset dir="${path}" includes="${targetDir}/*-o.js" />
 96         </delete> -->
 97
 98         <echo message="Clean Finished" />
 99
100     </target>
101 </project>

在命令提示符(CMD)下用ant的指令运行(别告诉我你不会。。。。。),学过Java的应该都懂的,javac嘛,一个道理:

其实到这里大概流程就差不多了,但是呢,懒人总有偷懒的方法,上面还要打命令提示符,啊啊啊啊啊啊啊啊~

然后,自己做了个简单的批处理文件。



第六步:创建build.bat批处理文件自动执行ant指令

鼠标右键新建一个txt文件,然后打入

这里build.bat和build.xml是放在同一个路径下的。所以可以这样直接调用指令,如果你想放在别的地方是要改路径的。

然后保存,后缀txt改成bat就可以了。

以后,修改完代码之后按下build.bat键盘F3(Eclipse打开文件快捷键)就可以链接合并压缩你的JS和CSS代码了。

当然,如果你不想压缩只想合并的话呢,把build.xml压缩那块删了就可以了。



上面这样做其实还是有一些小问题的,后台开发人员如果要去设置路径映射那些的话其实是要去build_output文件夹下面做的,因为这个文件夹才是页面真正的地址(代码已被合并压缩)。

记得跟他们说一下就好了。

作者:manfred Hu

博客:http://www.cnblogs.com/manfredHu

本文地址:http://www.cnblogs.com/manfredHu/p/4719606.html

项目分享:http://yunpan.cn/cdPU8mrHYRLrd  访问密码 d1ba

转载请注明出处谢谢!!!

时间: 2024-08-12 22:25:42

使用Ant和YUICompressor链接合并压缩你的JS和CSS代码的相关文章

在项目生成时就合并压缩你的js

对网站优化来讲,合并压缩js.css等静态内容是必修课之一,一则可以节省宽带:二则可以减少http请求:三则加快了网站的访问速度 对于如何实现合并压缩js 方案一: 继承IHttpModule ,对http进行拦截,然后获取其<script src=*> tag,将js文件取出来合并成为一个资源文件 方案二:如果你用的web解决方案为 asp.net mvc 4,那么当然可以用Bundle技术. 方案三:不依赖任何服务器技术,本地先合并压缩好后再上传 本文着重讲解方案三 要合并文件,可以用do

【翻译】Microsoft Ajax Minifier 快速使用指南(与VS集成使用) 编译后直接压缩项目的JS或CSS文件

网上找了好久终于找到一个能跟VS集成使用的JS和CSS压缩工具,因为害怕忘记,所以给转发过来,顺便翻译一下,大学那会儿学的英语基本上都已经还给老师了,所以翻译的不太好,不过能看懂就成,对吧? 原文地址:http://www.asp.net/ajaxlibrary/AjaxMinQuickStart.ashx 一.在命令行中使用 在下载安装完成Microsoft Ajax Minifier之后,你就可以以命令的方式使用它了.单击“开始”——“所有程序”——“Microsoft Ajax Minif

将Microsoft Ajax Minifier集成到VS2013对JS、CSS进行编译时压缩

在网站发布中,一般要将js,css文件压缩减少体积,以减少在HTTP请求中的流量.将Microsoft Ajax Minifier集成到VS2013中就可以对JS.CSS进行编译时压缩. VS2013的集成方法: Asp.net网站上的详细说明网址:http://www.asp.net/ajaxlibrary/AjaxMinQuickStart.ashx      Microsoft Ajax Minifier下载地址:http://ajaxmin.codeplex.com/ 下载安装后,按照如

AngularJS结合RequireJS做文件合并压缩的那些坑

我在项目使用了AngularJS框架,用RequireJS做异步模块加载(AMD),在做文件合并压缩时,遇到了一些坑,有些只是解决了,但不明白原因. 那些坑 1. build.js里面的paths必须跟main.js里面的保持一致. 这个build.js就是r.js使用的配置文件,而main.js就是RequireJS的main文件.在合并压缩时候,build.js文件里面也需要写paths,而且还是跟main.js一样,我很奇怪为什么就不能识别main里面的require.config的pat

nginx js、css多个请求合并为一个请求(concat模块)

模块介绍 mod_concat模块由淘宝开发,目前已经包含在tengine中,并且淘宝已经在使用这个nginx模块.不过塔暂时没有包含在nginx中.这个模块类似于apache中的modconcat.如果需要使用它,需要使用两个”?”问号. 来个范例: http://example.com/??style1.css,style2.css,foo/style3.css 以上将原先3个请求合并为1个请求 如果你担心文件被用户的浏览器缓存而没有及时更新,你依旧可以带上一个版本号的参数,如下: http

win7下,Ant 配合yuicompressor对js和css进行合并、压缩、拷贝处理

本文基于windows7系统,mac上或许更简单些.本文参阅了无墨来点睛的文章http://www.cnblogs.com/catprayer/archive/2011/08/03/2126719.html,再此说明. 花了点时间,总算是试验成功,demo地址:http://pan.baidu.com/s/1c0dGm1i ant可以去官网下载,地址是:http://ant.apache.org/ ,yuicompressor也可以去官网下一个https://github.com/yui/yui

合并压缩css和Js的方式

[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/74/] 本篇博客从减少浏览器加载外部资源连接数的思考角度着手,要想深入了解其他加快网页显示速度的原理,估计又得花不少时间,这需要把前端跟后端都说解释清楚.有时间我会分开写其他部分的内容.这里为了节省时间,只介绍如何减少网页需要加载的外部资源,加快浏览器的响应速度. 本篇博客从减少浏览器加载外部资源连接数的思考角度着手,要想深入了解其他加快网页显示速度的原理,估计又得花不少时间,这需要把前端跟后端都说解释清楚.

介绍一种基于gulp对seajs的模块做合并压缩的方式

之前的项目一直采用grunt来构建,然后用requirejs做模块化,requirejs官方有提供grunt的插件来做压缩合并.现在的项目切到了gulp,模块化用起了seajs,自然而然地也想到了模块合并压缩的问题.然后一开始在解决这个问题的时候,并不是很顺利,在npm上并没有那种特别流行的专门用来做seajs合并压缩的gulp插件,虽然在seajs的github上也看了不少的issue,但是大多数都是只能将所有的模块文件合并成一个总的文件,这对于单页面的应用来说肯定没有问题,但是对于多页面的应

java Web程序使用wro4j合并、压缩js、css等静态资源

在Web项目中,js.css合并压缩,不仅有利于减少Http请求数量.减少宽带资源占用,还能有效的管理各种js.css的引入,使整个项目更加有序.而对于访问用户来说,其更大的好处是增加了页面的打开速度,大大提升了用户体验. 所以,互联网各类网站,会通过各种手段,对静态文件进行合并.压缩,动静分离,使用CDN加速等.以此达到网站访问速度的优化.everycoding.com官网使用的是Java语言开发.因此使用了Java 方面的第三方Jar:wro4j来压缩Js.CSS.本文主要介绍Java We