我如何连接javascript文件并replaceHTML中的引用?

作为TeamCity的构build/ CI过程的一部分,我想指定一组HTML文件中引用的JavaScript文件,并将它们合并为一个。

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

之前:

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

 <script src="combined.js" /> 

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

我到目前为止所尝试的:

我一直在看grunt-usemin看起来不错,但需要构build服务器来执行每个生成的npm install来获得依赖关系,然后运行它。 这需要很长时间,并不是一个好的解决scheme,因为我们非常频繁地构build+部署。

我知道我也可以添加我的node_modules文件夹混帐,但这也是不可取的。 如果grunt可以运行全局安装的这些模块,但这不是一个咕噜的方法(除非我错了,grunt希望所有的本地安装)。

有人还build议在开发者机器上运行grunt。 再一次,因为我们有短暂的虚拟机而不受欢迎,这会破坏开发stream程。

如果我可以在本地运行grunt-usemin而不用烦躁,那将是非常好的!

为了组合文件,你可以使用猫

 cat 1.js 2.js > combined.js 

要replace大块的html,你可以使用sed

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

这是一个相当普遍的解决scheme,但对我来说似乎有点笨拙。 如果你在节点中渲染这个HTML,你可能会考虑在JavaScript中replace它,如果组合文件存在。

 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的asynchronous版本

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

npm install -g hashcat

@ gustavohenke的build议是接近,但最终h5bp被certificate是太成问题的build设服务器上使用。 最终创build这个模块并不需要很长时间,现在可以满足我的需求。 我将把这个标记为答案,直到将来有更好的答案出现。