我有一个网站元素,在 index.html
的主体末尾包含几个 JavaScript 文件,一些来自第 3 方库,其余的是我写的:
<html>
...
<body>
...
<script src="lib/lib1.js"></script>
<script src="lib/lib2.js"></script>
<script src="js/js1.js"></script>
<script src="js/js2.js"></script>
...
</body>
</html>
对于生产,我自然想要一组优化的包含。首先,作为更大构建过程(使用 Maven)的一部分,所有非库 JavaScript 都被组合、优化和缩小。我还想使用缩小的库文件(可能来自 CDN):
<html>
...
<body>
...
<script src="lib/lib1.min.js"></script>
<script src="//cdn/lib2.min.js"></script>
<script src="js/combined.min.js"></script>
...
</body>
</html>
我们的 CSS 使用了类似的过程。
所以,我的问题是:人们使用什么技术来完成脚本/CSS 集之间的这种切换?
因为我的生产构建过程已经使用了 Maven,所以我愿意接受涉及 Maven 插件的建议,例如 this one .但是,出于工作流程的原因,我想保持 index.html
干净(例如,我不想用 token 代替脚本包含,它需要在没有进一步处理的情况下工作。)
最佳答案
我想出了一个很好的基于 Maven 的解决方案,使用 maven-replacer-plugin .在我的 HTML 文件中,我使用注释来阻止我的开发和生产代码:
<!-- DEVELOPMENT -->
<script src="lib/lib1.js"></script>
<script src="lib/lib2.js"></script>
<script src="js/js1.js"></script>
<script src="js/js2.js"></script>
<!-- /DEVELOPMENT -->
<!-- PRODUCTION
<script src="lib/lib1.min.js"></script>
<script src="//cdn/lib2.min.js"></script>
<script src="js/combined.min.js"></script>
/PRODUCTION -->
然后,我为 Maven 插件使用以下配置 block :
<configuration>
<file>index.html</file>
<replacements>
<replacement>
<token><!-- DEVELOPMENT --></token>
<value><!-- DEVELOPMENT</value>
</replacement>
<replacement>
<token><!-- /DEVELOPMENT --></token>
<value>/DEVELOPMENT --></value>
</replacement>
<replacement>
<token><!-- PRODUCTION</token>
<value><!-- PRODUCTION --></value>
</replacement>
<replacement>
<token>/PRODUCTION --></token>
<value><!-- /PRODUCTION --></value>
</replacement>
</replacements>
</configuration>
运行后,开发代码被关闭,生产代码被打开:
<!-- DEVELOPMENT
<script src="lib/lib1.js"></script>
<script src="lib/lib2.js"></script>
<script src="js/js1.js"></script>
<script src="js/js2.js"></script>
/DEVELOPMENT -->
<!-- PRODUCTION -->
<script src="lib/lib1.min.js"></script>
<script src="//cdn/lib2.min.js"></script>
<script src="js/combined.min.js"></script>
<!-- /PRODUCTION -->
显然,您可以轻松地删除开发代码。
关于javascript - 以编程方式切换到网页的生产源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16627451/