如何连接 javascript 文件并替换 HTML 中的引用?

Posted

技术标签:

【中文标题】如何连接 javascript 文件并替换 HTML 中的引用?【英文标题】:How can I concatenate javascript files and replace the reference in my HTML? 【发布时间】:2013-08-02 06:40:33 【问题描述】:

作为我在 TeamCity 上的构建/CI 流程的一部分,我想指定一组在我的 html 中引用的 javascript 文件并将它们组合成一个。

换句话说,这就是我想要完成的。

之前:

<script src="1.js" />
<script src="2.js" />

之后

<script src="combined.js" />

我正在寻找一个命令行工具来将 1.js 和 2.js 连接成 combine.js。然后,一个命令行工具(或者可能是相同的工具)将 HTML 文件中的引用替换为这个新文件。请告诉我如何做到这一点。

到目前为止我所尝试的:

我一直在看grunt-usemin,它看起来不错,但需要构建服务器在每次构建时执行npm install 以获取依赖项,然后运行它。这需要很长时间并且不是一个好的解决方案,因为我们非常频繁地构建+部署。

我知道我也可以将我的node_modules 文件夹添加到 git,但这也是不可取的。如果 grunt 可以运行全局安装的这些模块,那就太好了,但这不是 grunt 的方式(除非我弄错了,grunt 希望所有东西都安装在本地)。

有人还建议在开发者机器上运行 grunt。同样,由于我们有瞬态虚拟机,所以不受欢迎,这会破坏开发流程。

如果我可以在本地运行 grunt-usemin 而无需 grunt,那就太好了!

【问题讨论】:

grunt-* 没有 grunt 不会发生 :) 但是看看这里,谁知道呢? github.com/h5bp/node-build-script h5bp 看起来很有希望,但在尝试让它与 TeamCity 代理一起工作 2 天后,我不得不放弃。不过真的很感谢这个建议。我最终修改了自己的,请参阅答案。 【参考方案1】:

你可以使用 cat 来组合文件

cat 1.js 2.js > combined.js

要替换 html 块,您可以使用 sed

sed -i "s/<script src=\"1.js\">\n<script src=\"2.js\">/<script src=\"combined.js\">/g" *.html

这是一个相当通用的解决方案,但对我来说似乎有点笨拙。如果您在节点中呈现此 html,如果组合文件存在,您可能会考虑在 javascript 中替换它。

if (fs.existsSync('combined.js')) 
    res.end(html_contents.replace('<script src="1.js"/>\n<script src="2.js"/>','<script src="combined.js">'));
 else 
    res.end(html_contents);

为了获得更好的性能,您当然可以使用 fs.exists 的异步版本

【讨论】:

【参考方案2】:

我最终创建了自己的:https://npmjs.org/package/hashcat

npm install -g hashcat

@gustavohenke 的建议很接近,但最终证明 h5bp 在构建服务器上使用时问题太大。最终创建这个模块并没有花费很长时间,并且可以满足我现在的需求。我会将此标记为答案,直到将来有更好的答案出现。

【讨论】:

以上是关于如何连接 javascript 文件并替换 HTML 中的引用?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 用硬链接替换重复文件?

Python:如何替换pdf中的文本

替换python脚本中的字符串并执行脚本

python打开一个文件并替换内容[重复]

bat文件中如何查找某个字符串并对其进行替换

按文件名后缀查找文件并替换文件的python脚本