`

Uglifyjs和YUI compress的antbuilder脚本示例

 
阅读更多

首先先问下坛子里的筒子: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和yuicompressor 压缩css、js方案

    以上Ant脚本定义了两个目标,`compress-css` 和 `compress-js`,分别处理CSS和JavaScript文件。`srcdir` 指定了源文件目录,`destdir` 是压缩后文件保存的位置,`extension` 是添加到输出文件名的后缀,`type` 指定...

    yuicompressor-maven-plugin

    这种优化方法有助于提高网站性能,尤其在用户需要加载大量脚本和样式表时。 ### 三、yuicompressor-maven-plugin的使用 要在Maven项目中使用`yuicompressor-maven-plugin`,首先需要在项目的`pom.xml`文件中添加...

    yuicompressor.jar

    在这个示例中,我们定义了两个目标,`compress-js`和`compress-css`,分别处理JavaScript和CSS文件。通过设置`--type`参数,我们可以指定处理的文件类型,`--charset`确保正确处理非ASCII字符。`arg`标签用于传递...

    ant yui 对应所需的jar

    在IT行业中,Ant和YUI是两个非常重要的工具,它们分别在构建自动化和前端资源管理方面发挥着关键作用。本文将深入探讨Ant和YUI,以及它们如何协同工作,并介绍在实际项目中如何使用它们所需的JAR文件。 首先,Ant是...

    JavaScript(JS) 压缩 / 混淆 / 格式化 批处理工具

    JavaScript是一种广泛应用于网页开发的脚本语言,它负责实现网页的动态效果和用户交互功能。随着前端技术的发展,JavaScript文件通常会变得越来越庞大,直接使用这些文件会增加网页加载的时间,影响用户体验。因此,...

    Javascript开发之js压缩篇.docx

    以下是一个示例Ant脚本,用于自动压缩项目中的所有JavaScript文件: ```xml <property name="yuicompressor" value="${tools}/yuicompressor-2.3.6.jar"/> <!-- 压缩所有需要的JS文件 --> ${dist}/WebRoot"> ...

    java开源包1

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包11

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包2

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包3

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包6

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包5

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包10

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包4

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包8

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包7

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包9

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    java开源包101

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

    Java资源包01

    Port Groper可以与用测试防火墙,干扰web 统计脚本的跟踪,为网站增加流量..往好了用什么都能干,就是不能让一个网站下线。 FTP客户端Java类库 ftp4j ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分...

Global site tag (gtag.js) - Google Analytics