我正在使用 Ant 来最小化我项目中的所有 JS 文件。它将我的各种 JS 文件(即:file1.js、file2.js、file3.js)编译成一个文件(即:file.min.js),然后将此最小化版本与我的 HTML 源文件一起复制到构建文件夹中.
它工作得很好,但被复制到构建文件夹的 HTML 源文件仍然引用旧的未最小化版本(file1.js、file2.js 等...)
所以我的问题是,当我运行 Ant 构建时,是否有一个函数/特性可以更改 HTML 源代码中的任何相关文件引用?
最简单的方法是简单地始终使用缩小的 JS。只要您永远不需要通过调试器运行 JS 或获得可理解的回溯,这将非常有效。
一种称为“源地图”的技术解决了这个问题。如果您使用源映射,则始终可以使用缩小版,当您需要调试时,调试器会按需加载未缩小版。不幸的是,在撰写本文时(2013 年 3 月),源映射还很新,并且该技术需要浏览器和缩小器的支持。
如果您的 HTML 是从模板生成的,您最好将设置传递给模板,以告诉它您是在构建开发还是生产,然后相应地更改标题文本。
如果上述解决方案都不适合您,解决您的问题的一个 hacky 解决方案是在您的 HTML 中标记单独的注释,如下所示:
<!-- BEGIN DEVELOPMENT -->
<script src="src/js/file1.js"></script>
<script src="src/js/file2.js"></script>
<script src="src/js/file3.js"></script>
<!-- END DEVELOPMENT -->
<!-- BEGIN PRODUCTION
<script src="dist/js/file.js.min"></script>
END PRODUCTION -->
然后让 Ant 运行一些 sed 脚本来注释掉开发语句并添加生产语句:
# run this command to create production version of project.html
cat src/html/project.html \
| sed -e 's/<!-- BEGIN DEVELOPMENT -->/<!-- BEGIN DEVELOPMENT/' \
| sed -e 's/<!-- END DEVELOPMENT -->/ END DEVELOPMENT -->/' \
| sed -e 's/<!-- BEGIN PRODUCTION/<!-- BEGIN PRODUCTION -->/' \
| sed -e 's/ END PRODUCTION -->/<!-- END PRODUCTION -->/' \
> dist/html/project.html
我建议将此命令放入 shell 脚本中,并让 Ant 使用 execfile 运行该脚本。在 ant-contrib 或其他地方可能还存在用于这种替换的第三方任务,但是对于构建您的代码的任何人来说,使用它们将是一件痛苦的事情,因为他们必须安装您使用的相同的 ant 扩展。
如果您正在构建一个缺少 sed 的非类 UNIX 系统(即 Windows),您也许可以使用 gnuwin32 项目中的 sed 的 Windows 版本。或者只是在 Virtualbox VM 中的 Linux 上构建