在这里聚会真的很晚,但认为这可能会帮助仍在寻找不同答案的人:
在尝试使用 YUI Compressor 之后,我很失望它与最新版本的 jQuery 和 Prism(我的项目需要的两个主要的 3rd 方 JS 库,我想压缩到一个文件中)不兼容。所以我决定使用Terser,它是 Uglify-JS 的一个分支,支持 ES6+。我无法使用该<exec>
任务直接运行它,但使用 Windows 命令行方法至少适用于 Win 10(不是说它不能正常工作,但这是一个非常简单的解决方法)。无需向 Path 系统变量添加任何其他内容(因为通常在安装期间添加 Node.JS)。我首先使用 ANT<concat>
任务来制作一个未压缩的大文件。使用<fileset>
它会保留顺序(如果这很重要,无论如何)。
<concat destfile="${js-big-file}" encoding="UTF-8" outputencoding="UTF-8" fixlastline="true">
<filelist refid="js-input-filelist"/>
</concat>
然后使用该<exec>
任务运行任何 NPM 程序,例如 Terser。该任务的 Apache 手册页指出这是运行 .bat 文件的 Windows 解决方法,但它实际上允许您运行几乎任何命令行应用程序(即使是那些<exec>
神秘地无法找到的应用程序)。
<exec executable="cmd">
<arg value="/c"/>
<arg value="terser"/>
<arg value="${js-big-file}" />
<arg value="-o" />
<arg value="${smaller-js-file}"/>
</exec>
整合?它是 ANT 构建脚本的一部分(一个支持自定义 JavaScript 的 DITA Open Toolkit 插件,除其他外 - 本身不是 Java Web 应用程序,而是使用 Java 构建 HTML5 输出),因此集成只不过是添加那些任务到一个新目标(有更多关于设置默认值和检查输入参数的代码!)。
易于启用/禁用?就我而言,我有一个传递给 ANT Build 的参数,以包括构建和缩小 JS 文件。所以是的,如果我将参数设置为“是”,它只会执行这个目标。在 ANT 构建中设置这是一件非常容易的事情。
透明到目前为止,它似乎对我包含的几个 JS 文件中的任何一个都没有影响。其中一些是我自己的(无论如何我都不是 JS 专家),而正如我所提到的,有些是常见的 JS 库。
Minifier Terser,但您可以通过此方法使用几乎任何带有命令行输入的缩小文件。
缺乏特色?Terser仅适用于 JavaScript。如果我想对我的 CSS 文件做同样的事情(我会这样做),我会使用 YUI Compressor。
Like That,它是一个当前活跃的项目,并得到了很好的支持。另外,当前的实现(仅通过 ANT<exec>
目标调用它)允许我在以后需要使用其他东西时更换缩小器。
不喜欢它需要 Node.JS。请注意,没有什么反对 Node.JS,只是这个特定项目不需要它。我更喜欢为此使用像 YUI Compressor 这样的 Java .jar 文件(如果需要,我可以使用插件轻松分发它)。