如何自动化Java Web应用程序的Javascript缩小?

gus*_*afc 121 javascript java automation minify

我很想知道您希望如何为Java Web应用程序自动化Javascript缩小.以下是我特别感兴趣的几个方面:

  • 它是如何整合的?它是构建工具,servlet过滤器,后处理WAR文件的独立程序或其他东西的一部分吗?
  • 是否容易启用和禁用?尝试调试缩小的脚本是非常不可靠的,但是对于开发人员来说,测试缩小不会破坏任何东西也很有用.
  • 它是否透明地工作,或者它在我的日常工作中是否有任何副作用(除了缩小中固有的那些)?
  • 它使用哪种缩放器?
  • 缺少你能想到的任何功能吗?
  • 你喜欢它什么?
  • 喜欢什么?

这将主要作为我未来项目的参考(希望其他SOer也会发现它的信息),所以各种工具都很有趣.

(请注意,这不是关于哪个minifier最好的问题.我们已经有很多这样的.)

gus*_*afc 64

总结帖

如果您在此主题中发布新内容,请编辑此帖子以链接到您的帖子.

  • 值得注意的是 yuicompressor 似乎相当老了,而且很可能不支持 ES6(上面的评论听起来似乎有道理)。据我了解,最新版本的 yui(2013 年 v2.4.8)仍然依赖于 Mozilla Rhino(https://github.com/yui/yuicompressor#modified-rhino-files)并支持 JavaScript1.7:https://developer .mozilla.org/en-US/docs/Mozilla/Projects/Rhino/Overview (不太确定它与 ES5 或 ES6 有多接近) (2认同)

ser*_*erg 13

我们正在使用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>
Run Code Online (Sandbox Code Playgroud)

  • 片段; 不错.你是否在dev版本上重新定位你的`script src`,或者你只是将非缩小的文件复制到compressed/js目录中? (2认同)

小智 12

我认为这项工作最好和最合适的工具之一是wro4j.请查看https://github.com/wro4j/wro4j

它可以满足您的一切需求:

  • 保持项目Web资源(js和css)组织良好
  • 在运行时(使用简单的过滤器)或构建时(使用maven插件)合并和缩小它们
  • 免费和开源:根据Apache 2.0许可证发布
  • wro4j支持的几种缩小工具:JsMin,Google Closure压缩器,YUI等
  • 非常好用.支持Servlet过滤器,普通Java或Spring配置
  • Javascript和CSS元框架支持:CoffeeScript,Less,Sass等
  • 验证:JSLint,CSSLint等

可以在调试和生产模式下运行.只需指定它应该处理/预处理的所有文件,然后完成其余的工作.

您可以简单地包含合并,缩小和压缩资源,如下所示:

<script type="text/javascript" src="wro/all.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • 看起来确实像一个漂亮的工具.谢谢你的更新! (2认同)

小智 8

我为Google Closure编译器和Yahoo压缩器编写了ant宏,并将此文件包含在不同的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>
Run Code Online (Sandbox Code Playgroud)
  • 集成:<import file="build-minifier.xml" />在build.xml中,然后像往常一样调用ant任务:<gc-js dir="${build.js.dir}" src="prototype" /> <yc-js-all dir="${build.js.dir}" />

  • 选择两个缩小器:Google Closure编译器和Yahoo压缩器,你应该手动下载它们并放在xml文件附近

  • Minifiers跳过已经压缩的文件(以...结尾-min*)

  • 通常我会创建三个版本的脚本:未压缩(例如prototype.js)用于调试,使用闭包编译器(prototype-min-gc.js)压缩生产服务器,使用Yahoo(prototype-min-yc.js)进行压缩以进行故障排除,因为闭包编译器使用风险优化并且有时会生成无效的压缩文件而Yahoo压缩器更安全

  • Yahoo压缩器可以用单个宏缩小dir中的所有文件,Closure编译器不能


dfa*_*dfa 7

我试过两种方法:

  1. 使用servlet过滤器.在生产模式下,过滤器被激活,它会压缩绑定到URL的任何数据,如*.css或*.js
  2. 使用maven和yuicompressor-maven-plugin ; 压缩是在una-tantum,(组装生产战争时)

当然后一种解决方案更好,因为它不会在运行时消耗资源(我的webapp使用谷歌应用程序引擎)并且它不会使您的应用程序代码复杂化.因此,在以下答案中假设后一种情况:

它是如何整合的?它是构建工具,servlet过滤器,后处理WAR文件的独立程序或其他东西的一部分吗?

使用maven

是否容易启用和禁用?尝试调试缩小的脚本是非常不可靠的,但是对于开发人员来说,测试缩小不会破坏任何东西也很有用.

你只有在组装最后的战争时激活它; 在开发模式下,您会看到资源的未压缩版本

它是否透明地工作,或者它在我的日常工作中是否有任何副作用(除了缩小中固有的那些)?

绝对

它使用哪种缩放器?

YUI压缩机

它缺少你能想到的任何功能吗?

不,它非常完整且易于使用

你喜欢它什么?

它与我最喜欢的工具(maven)集成,插件位于中央存储库(一个优秀的maven公民)