我希望听到您希望如何为您的Java Web应用自动化的Javascript缩小。 这里有几个方面,我特别感兴趣的:
- 它是如何整合? 这是你的构建工具,一个Servlet过滤器的一部分,一个独立的程序后处理WAR文件,还是其他什么东西?
- 是否容易启用和禁用 ? 这是非常无趣尝试和调试脚本精缩,但它也是有用的开发人员能够测试该微小不会破坏任何东西。
- 是否(在微小固有的那些开),我有我的一天到一天的工作,以审议透明地工作呢,还是有什么副作用?
- 它使用哪种minifier?
- 是否缺少 ,你能想到的任何功能 ?
- 你喜欢它什么?
- 你不喜欢它呢?
这将主要作为我未来项目的参考(并希望其他SOER的会发现它内容丰富,太),所以各种工具很有趣。
(请注意, 这不是一个问题,关于这minifier是最好的 。我们有很多这样的身边了。)
Answer 1:
围捕后
如果您发布新的东西在这个线程,编辑这篇文章链接到你的。
- 蚂蚁
apply
任务(使用锐压缩机) - 自锐压缩机Ant任务
- Maven的YUI压缩机的插件
- 冲剂(用于JSP,JSF,Grails的,蚂蚁)
- 对于谷歌关闭编译器的Ant宏
- wro4j(Maven的,Servlet过滤器,普通Java等)
- 蚂蚁锐压缩机(压缩JS + CSS Ant任务)
- JAWR
- 缩小Maven插件
- 矮胖
Answer 2:
我们使用Ant任务期间生产版本来缩小与的YUICompressor js文件,并把结果放入一个文件夹分开。 然后,我们将这些文件上传到Web服务器。 你可以找到YUI + Ant集成一些很好的例子,在这个博客 。
下面是一个例子:
<target name="js.minify" depends="js.preprocess">
<apply executable="java" parallel="false">
<fileset dir="." includes="foo.js, bar.js"/>
<arg line="-jar"/>
<arg path="yuicompressor.jar"/>
<srcfile/>
<arg line="-o"/>
<mapper type="glob" from="*.js" to="*-min.js"/>
<targetfile/>
</apply>
</target>
Answer 3:
我认为这份工作最好的和正确的工具之一是wro4j退房https://github.com/wro4j/wro4j
它做你需要的一切:
- 保留项目的网络资源(JS和CSS)良好的组织
- 合并&在运行时运行如下它们(使用简单的过滤器)或构建时间(使用maven插件)
- 自由和开放源码:下一个Apache 2.0许可发布
- JsMin,谷歌关闭压缩机,YUI等:由wro4j支持几个微小工具
- 使用非常简单。 支持Servlet过滤器,普通的Java或Spring配置
- JavaScript和CSS元框架的支持:CoffeeScript的,少,萨斯等
- 验证:JSLint的,CSSLint等
可以在调试以及生产模式下运行。 只要指定应该处理的所有文件/预处理并没有休息。
你可以简单地包括合并,微细化以及压缩的资源是这样的:
<script type="text/javascript" src="wro/all.js"></script>
Answer 4:
我已经写了谷歌Closure编译器和雅虎压缩机蚂蚁宏和包括在不同的Web项目文件。
<?xml version="1.0" encoding="UTF-8"?>
<!-- CSS and JS minifier. -->
<!DOCTYPE project>
<project name="minifier" basedir=".">
<property name="gc" value="compiler-r1592.jar" />
<property name="yc" value="yuicompressor-2.4.6.jar" />
<!-- Compress single js with Google Closure compiler -->
<macrodef name="gc-js">
<attribute name="dir" />
<attribute name="src" />
<sequential>
<java jar="${gc}" fork="true">
<!--
- - compilation_level WHITESPACE_ONLY | SIMPLE_OPTIMIZATIONS | ADVANCED_OPTIMIZATIONS
Specifies the compilation level to use. Default: SIMPLE_OPTIMIZATIONS
- - warning_level QUIET | DEFAULT | VERBOSE
Specifies the warning level to use.
-->
<arg line="--js=@{dir}/@{src}.js" />
<arg line="--js_output_file=@{dir}/@{src}-min-gc.js" />
</java>
</sequential>
</macrodef>
<!-- Compress single js with Yahoo compressor -->
<macrodef name="yc-js">
<attribute name="dir" />
<attribute name="src" />
<sequential>
<java jar="${yc}" fork="true">
<arg value="@{dir}/@{src}.js" />
<arg line="-o" />
<arg value="@{dir}/@{src}-min-yc.js" />
</java>
</sequential>
</macrodef>
<!-- Compress all js in directory with Yahoo compressor -->
<macrodef name="yc-js-all">
<attribute name="dir" />
<sequential>
<apply executable="java" parallel="false">
<fileset dir="@{dir}" includes="*.js" excludes="*-min*.js" />
<arg line="-jar" />
<arg path="${yc}" />
<srcfile />
<arg line="-o" />
<mapper type="glob" from="*.js" to="@{dir}/*-min-yc.js" />
<targetfile />
</apply>
</sequential>
</macrodef>
<!-- Compress all css in directory with Yahoo compressor -->
<macrodef name="yc-css-all">
<attribute name="dir" default="${build.css.dir}" />
<sequential>
<apply executable="java" parallel="false">
<fileset dir="@{dir}" includes="*.css" excludes="*-min*.css" />
<arg line="-jar" />
<arg path="${yc}" />
<arg line="-v --line-break 0" />
<srcfile />
<arg line="-o" />
<mapper type="glob" from="*.css" to="@{dir}/*-min.css" />
<targetfile />
</apply>
</sequential>
</macrodef>
</project>
集成: <import file="build-minifier.xml" />
在你的build.xml文件,然后调用像往常一样Ant任务: <gc-js dir="${build.js.dir}" src="prototype" />
<yc-js-all dir="${build.js.dir}" />
2个minifiers的选择:谷歌关闭编译器和雅虎压缩机,您应该手动下载并把XML文件近
Minifiers跳过已经压缩的文件(结尾-min*
)
通常我做剧本的三个版本:压缩(如prototype.js
用于调试),以闭合编译器(压缩prototype-min-gc.js
)用于生产服务器,与雅虎(压缩prototype-min-yc.js
)进行故障排除,因为关闭编译器使用风险优化和有时会产生无效的压缩文件,雅虎压缩机更安全
雅虎压缩机可以再压缩在单个宏目录中的所有文件,关闭编译器不能
Answer 5:
我尝试了两种方式:
- 使用Servlet过滤器。 当在生产模式中,过滤器被激活,并且它压缩任何数据一定到URL像*的CSS或*的.js
- 使用maven和的YUICompressor-行家-插件 ; 该压缩perfomed UNA-tantum,(组装生产战争时)
当然,后一种解决方案是更好,因为它在运行时不消耗资源(我的webapp使用谷歌应用程序引擎),它并不复杂应用程序代码。 所以承担如下回答后一种情况下:
它是如何整合? 这是你的构建工具,一个Servlet过滤器的一部分,一个独立的程序后处理WAR文件,还是其他什么东西?
使用maven
是否容易启用和禁用? 这是非常无趣尝试和调试脚本精缩,但它也是有用的开发人员能够测试该微小不会破坏任何东西。
您激活assemblying最后的战争的话,只有当; 在开发模式下,你看到你的资源的未压缩版本
是否(在微小固有的那些开),我有我的一天到一天的工作,以审议透明地工作呢,还是有什么副作用?
绝对
它使用哪种minifier?
YUI压缩机
是否缺少,你能想到的任何功能?
不,这是非常完整的,易于使用
你喜欢它什么?
它是与我最喜爱的工具(Maven的)集成和插件是在中央资料库(一个很好的行家公民)
Answer 6:
我想你需要一个压缩库,例如颗粒标签。
http://code.google.com/p/granule/
它gzip和JavaScript的结合由G包:用不同的方法压缩标签,也有Ant任务以及
代码示例是:
<g:compress>
<script type="text/javascript" src="common.js"/>
<script type="text/javascript" src="closure/goog/base.js"/>
<script>
goog.require('goog.dom');
goog.require('goog.date');
goog.require('goog.ui.DatePicker');
</script>
<script type="text/javascript">
var dp = new goog.ui.DatePicker();
dp.render(document.getElementById('datepicker'));
</script>
</g:compress>
...
Answer 7:
我真的很惊讶没有人提到JAWR - https://jawr.github.io
这是相当成熟的,支持所有标准的功能,是可以预期的,并且多一点。 这里是如何保持对OP的优秀标准。
它是如何整合? 这是你的构建工具,一个Servlet过滤器的一部分,一个独立的程序后处理WAR文件,还是其他什么东西?
它最初没有在应用程序启动处理/繁重工作和服务是基于一个servlet的 。 用3.X开始他们增加了对支持在构建时集成 。
对于JSP和Facelets支持通过自定义的JSP标签库导入处理资源提供。 除此之外,一个JS资源加载器来实现,它支持从静态的HTML页面加载的资源 。
是否容易启用和禁用? 这是非常无趣尝试和调试脚本精缩,但它也是有用的开发人员能够测试该微小不会破坏任何东西。
甲debug=on
选项可用之前应用程序启动来使用,和一个自定义GET
参数可在单个请求中生产被指定为在运行时对所述请求选择性地切换调试模式。
它使用哪种minifier?
对于JS它支持YUI压缩机和JSMin,对CSS我不知道。
是否缺少,你能想到的任何功能?
SASS
支持浮现在脑海。 这就是说,它不支持LESS
。
Answer 8:
我们的项目已经处理了它的一些方法,但我们继续使用YUI压缩机通过我们不同的迭代。
我们最初有一个servlet处理JavaScript的第一次特别访问文件压缩; 然后将其缓存。 我们已经有一个系统来处理自定义属性文件,所以我们简单地更新我们的配置文件,以支持启用或禁用取决于我们正在努力环境的压缩机。
现在的开发环境从不使用压缩的JavaScript调试目的。 相反,我们处理压缩在我们的构建过程中出口我们的应用程序WAR文件时。
我们的客户从未提出了对压缩的担忧,直到他们决定调试JavaScript开发者不会注意到它。 所以我说这是相当透明的,最小的,如果有的话,侧面影响。
Answer 9:
这为我工作: https://bitbucket.org/m6_russell_francis/yui-compressor-ant-task/wiki/Home
<!-- minimize all static *.css & *.js content -->
<target name="static-content-minify">
<taskdef name="yuicompressor"
classname="com.metrosix.yuicompressor.anttask.YuiCompressorTask">
<classpath>
<pathelement location="${jar.yui.compressor}"/>
<pathelement location="${jar.yui.anttask.compressor}" />
</classpath>
</taskdef>
<yuicompressor todir="${build.static.content.min}" charset="utf-8"
preserveallsemicolons="true" munge="true" >
<fileset dir="${src.static.content}">
<include name="**/*.css"/>
<include name="**/*.js"/>
</fileset>
</yuicompressor>
</target>
Answer 10:
我正在写管理网络资产的框架,叫做积重难返 。 它旨在通过使用WebJars和ServiceLoaders比jawr或wro4j更简单,更现代。
它是如何整合? 这是你的构建工具,一个Servlet过滤器的一部分,一个独立的程序后处理WAR文件,还是其他什么东西?
在发展中,一个servlet处理的资产是必要的。 资产然后将生产之前预编译,并放置在一个公共文件夹,以使得被用于在生成的正确的唯一部分包括在HTML。
是否容易启用和禁用? 这是非常无趣尝试和调试脚本精缩,但它也是有用的开发人员能够测试该微小不会破坏任何东西。
这将通过之间的研发和生产模式之间切换来完成。
是否(在微小固有的那些开),我有我的一天到一天的工作,以审议透明地工作呢,还是有什么副作用?
我认为它是透明的,但强烈倾向于使用WebJars的。
它使用哪种minifier?
哪一个,你把你的classpath的插件使用。 目前正在寻找在写的谷歌关闭编译器插件。
是否缺少,你能想到的任何功能?
仍处于预发布,虽然我在生产中使用它。 该Maven插件仍然需要大量的工作。
你喜欢它什么?
只是添加依赖配置框架的简单
你不喜欢它呢?
这是我的宝贝,我爱这一切;)
文章来源: How do you automate Javascript minification for your Java web applications?