首先先问下坛子里的筒子:uglifyjs的sources多个file,target运行后只压缩第一个文件,是不是有bug?不能一次多个文件批量压缩么?我都是先一个个压缩然后concat的。
贴代码如下:
/*
运行命令:
cms:>/groovy js
cms:>/groovy js /myjsdir
cms:>/groovy css
cms:>/groovy css /mycssdir
*/
def ant = new AntBuilder()
String base_dir = '../'
String app_name = 'app'
String dist_dir = "${base_dir}/dist"
String war_dir = "${base_dir}/webroot"
String dist_war_dir = "${dist_dir}/${app_name}.war"
String encoding = 'utf-8'
// 把js/css文件先转成ascii(如果**gbk),uglifyjs貌似只能outputEncoding utf-8
def nativeascii = {path_src, path_dest ->
String includes_str = new File(path_src).listFiles().grep{it.isFile() &&
it.name ==~ /.*(css|js)$/}.collect{it.name}.join(',')
ant.native2ascii encoding: encoding, src: path_src,
dest: path_dest, includes: includes_str
}
if(args && 'js' == args[0]){
// compress js sample
ant.taskdef name: 'uglify',
classname: 'uglify.ant.UglifyTask'
// change dir here
String dir = '/js'
if(args.size() > 1)
dir = args[1]
dir = dist_war_dir + dir
def js_dir = new File(dir)
def ascii_dir = new File(js_dir, 'ascii')
def output_dir = new File(js_dir, 'output')
ascii_dir.delete()
ascii_dir.mkdir()
output_dir.delete()
output_dir.mkdir()
def cmp = {js ->
println 'Start compile js file : ' + js
ant.uglify verbose: 'true', maxLineLen: 300,
output: new File(output_dir, js).absolutePath, {
sources dir: ascii_dir.absolutePath, {
file name: js
}
}
}
nativeascii(js_dir.absolutePath, ascii_dir.absolutePath)
// jscalendar.js压缩总报错,使用其他压缩工具
Set skip_js_ll = ['all.js', 'calendar.js']
ascii_dir.eachFile{
if(it.name.endsWith('.js')
&& !it.name.endsWith('.min.js')
&& !skip_js_ll.contains(it.name))
cmp(it.name)
}
// concat js files
ant.concat destfile: new File(js_dir, 'all.js').absolutePath,
encoding: encoding, append: true, {
fileset dir: js_dir.absolutePath, {
include name: '*.min.js'
}
fileset dir: new File(js_dir, 'output').absolutePath, {
include name: '*.js'
}
}
println 'Concat js files ok.'
}
if(args && 'css' == args[0]){
// compress css sample
ant.taskdef name: 'yuicompress',
classname: 'com.yahoo.platform.yui.compressor.YUICompressTask'
// change dir here
String dir = '/css/'
if(args.size() > 1)
dir = args[1]
dir = dist_war_dir + dir
def css_dir = new File(dir)
def ascii_dir = new File(css_dir, 'ascii')
def output_dir = new File(css_dir, 'output')
ascii_dir.delete()
ascii_dir.mkdir()
output_dir.delete()
output_dir.mkdir()
nativeascii(css_dir.absolutePath, ascii_dir.absolutePath)
ant.yuicompress linebreak: 300, warn: 'false', munge: 'yes',
preserveallsemicolons: 'true', outputfolder: output_dir.absolutePath, {
fileset dir: ascii_dir.absolutePath, {
include name: '*.css'
exclude name: 'all.css'
}
}
// concat css files
// new File(css_dir, 'all.css').withPrintWriter{w ->
// output_dir.listFiles().each{
// w.println "/* compress file ${it.name} */"
// it.eachLine{line ->
// w.println line
// }
// }
// }
ant.concat destfile: new File(css_dir, 'all.css').absolutePath,
encoding: encoding, append: true, {
fileset dir: output_dir.absolutePath, {
include name: '*.css'
}
}
println 'css file merge done.'
}
分享到:
相关推荐
以上Ant脚本定义了两个目标,`compress-css` 和 `compress-js`,分别处理CSS和JavaScript文件。`srcdir` 指定了源文件目录,`destdir` 是压缩后文件保存的位置,`extension` 是添加到输出文件名的后缀,`type` 指定...
这种优化方法有助于提高网站性能,尤其在用户需要加载大量脚本和样式表时。 ### 三、yuicompressor-maven-plugin的使用 要在Maven项目中使用`yuicompressor-maven-plugin`,首先需要在项目的`pom.xml`文件中添加...
在这个示例中,我们定义了两个目标,`compress-js`和`compress-css`,分别处理JavaScript和CSS文件。通过设置`--type`参数,我们可以指定处理的文件类型,`--charset`确保正确处理非ASCII字符。`arg`标签用于传递...
在IT行业中,Ant和YUI是两个非常重要的工具,它们分别在构建自动化和前端资源管理方面发挥着关键作用。本文将深入探讨Ant和YUI,以及它们如何协同工作,并介绍在实际项目中如何使用它们所需的JAR文件。 首先,Ant是...
JavaScript是一种广泛应用于网页开发的脚本语言,它负责实现网页的动态效果和用户交互功能。随着前端技术的发展,JavaScript文件通常会变得越来越庞大,直接使用这些文件会增加网页加载的时间,影响用户体验。因此,...
以下是一个示例Ant脚本,用于自动压缩项目中的所有JavaScript文件: ```xml <property name="yuicompressor" value="${tools}/yuicompressor-2.3.6.jar"/> <!-- 压缩所有需要的JS文件 --> ${dist}/WebRoot"> ...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...
Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...