结合JS和CSS文件作为构建的一部分
Combining JS and CSS files as part of build
我想连接我所有的JS文件,以减少浏览器在访问我的网站时发出的HTTP请求的数量。当然,在开发过程中将这些文件分开仍然是有价值的。广泛接受的解决方案是将连接作为构建的一部分执行。
连接部分非常简单。但是所有的HTML文件,仍然有一堆<script src="*.js">
标签引用预连接的js文件?它们现在需要指向单个连接的javascript文件。
我如何交换这些引用作为构建的一部分?
基于ant的解决方案可以从这个示例中派生出来。我将插入标准的免责声明,用正则表达式"解析"HTML可能不是一个好主意。
这个想法是:
- 删除所有
<script>
标签或将其转换为注释 - 插入一个
<script>
标签来引用你的合并Javascript。
我在</body>
结束标记之前插入了单个js,但是您可以根据需要进行调整。这里的源文件位于一个名为"dirty"的目录下;将调整后的文件放在一个名为"clean"的文件中。
<property name="single.js" value="single.js" />
<copy todir="clean" overwrite="true">
<fileset dir="dirty" />
<filterchain>
<tokenfilter>
<replaceregex
pattern="(<)('s*SCRIPT's+SRC=['"][^'"]+['"]'s*)/(>)"
replace="'1!--'2--'3"
flags="gi"/>
<replaceregex
pattern="(</BODY>)"
replace="<SCRIPT SRC="${single.js}" />${line.separator}'1"
flags="i"/>
</tokenfilter>
</filterchain>
</copy>
这样做的一种方法是让html只加载一个脚本,但在开发中,该脚本只是各种各样的"包装器",它使用这里列出的技术强制加载其他单独的脚本。在生产中,该脚本的内容被替换为所有脚本的联合(最好是通过一些服务器端连接)。
根据您使用的技术,您可以在html中有一个JS引用,到一个处理程序,该处理程序将目录中的所有JS文件连接到一个JS文件中。然后,您可以在开发过程中轻松地管理单个文件,并在运行时使用一个HTTP请求。有一些插件可以压缩JS,删除空白并缓存结果,但这取决于你的技术。
有一个名为wro4j的库,它可以用作构建时解决方案(maven插件)或运行时解决方案(过滤器),并帮助您将所有资源描述在单个位置,简单如:
<groups xmlns="http://www.isdc.ro/wro">
<group name="all">
<css>/asset/*.css</css>
<js>/asset/*.js</js>
</group>
</groups>
这样,你可以切换html中的所有资源引用:
<script src="script1.js">
<script src="script2.js">
<script src="script3.js">
...
<script src="script99.js">
<script src="all.js">
免责声明:这是一个有偏见的答案,因为我正在做这个项目。
有一个叫做minify: http://code.google.com/p/minify/的Google项目,它可能正是你要找的。
你可以使用modconcat,这是apache插件。它有助于像这样轻松地连接文件。
来自:<head>
<link rel="stylesheet" href="/css/reset.css" type="text/css" media="screen" />
<link rel="stylesheet" href="/css/master.css" type="text/css" media="screen" />
<link rel="stylesheet" href="/css/forms.css" type="text/css" media="screen" />
</head>
:
<head>
<link rel="stylesheet" href="/css/reset.css,master.css,forms.css" type="text/css" media="screen" />
</head>
- 我应该如何从xml文件构建一个javascript页面
- 如何在DOM元素上按类型构建此函数
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- Sencha Touch构建-排除文件
- RubyonRails——构建交互式接口应该朝哪个方向发展
- 如何检查字符串的一部分与数组匹配
- 为什么可以't我使用了AJAX响应的一部分
- 如何在构建node-webkit应用程序后获取外部资源
- Ext.js从json构建模型关系的问题
- 仅重新加载网页的一部分
- 如何使用ViewCompiler手动编译DOM的一部分
- Regex提取URL返回数组的一部分;未定义”;
- 如何为生产构建angular2应用程序
- Grunt构建导致Angular应用程序在dist上崩溃
- Html地图对象-点击地图获取id的一部分
- 构建JS测试,警报窗口重复上一个Q,而不是问下一个Q
- 动态构建一个数据表与scriplets
- JavaScript混淆作为构建过程的一部分
- 如何将jshint作为构建过程的一部分进行自动化
- 结合JS和CSS文件作为构建的一部分