如何连接javascript文件并替换HTML中的引用?
作为TeamCity构建/CI过程的一部分,我想指定一组在HTML中引用的JavaScript文件,并将它们组合成一个 换句话说,这就是我想要完成的 之前:如何连接javascript文件并替换HTML中的引用?,javascript,html,node.js,continuous-integration,npm,Javascript,Html,Node.js,Continuous Integration,Npm,作为TeamCity构建/CI过程的一部分,我想指定一组在HTML中引用的JavaScript文件,并将它们组合成一个 换句话说,这就是我想要完成的 之前: <script src="1.js" /> <script src="2.js" /> 之后 我正在寻找一个命令行工具,将1.js和2.js连接到combined.js中。然后,一个命令行工具(或者可能是同一个工具)将HTML文件中的引用替换为这个新文件。请告诉我如何才能做到这一点 到目前为止,我所尝试的:
<script src="1.js" />
<script src="2.js" />
之后
我正在寻找一个命令行工具,将1.js和2.js连接到combined.js中。然后,一个命令行工具(或者可能是同一个工具)将HTML文件中的引用替换为这个新文件。请告诉我如何才能做到这一点
到目前为止,我所尝试的:
我一直在研究哪个版本看起来不错,但是需要构建服务器在每个构建上执行npm安装
,以获取依赖项,然后运行它。这需要太长时间,而且不是一个好的解决方案,因为我们构建+部署非常频繁
我知道我也可以将我的node\u modules
文件夹添加到git,但这也是不可取的。如果grunt可以在全球范围内运行这些安装的模块,那就太好了,但这不是grunt的方式(除非我弄错了,grunt希望所有东西都安装在本地)
有人还建议在开发人员机器上运行grunt。同样,我们不希望出现瞬态虚拟机,这会破坏开发流程
如果我可以在没有grunt的情况下在本地运行grunt usemin,那就太好了 对于组合文件,您可以使用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
sed-i“s/\n//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);
}
if(fs.existsSync('combined.js')){
res.end(html_contents.replace('\n','');
}否则{
res.end(html_内容);
}
为了获得更好的性能,您当然可以使用fs.exists的异步版本我最终创建了自己的:
npm安装-g hashcat
@gustavohenke的建议很接近,但最终证明h5bp对于在构建服务器上使用来说问题太大。最终创建这个模块并没有花费很长时间,满足了我目前的需求。我会将此标记为答案,直到将来出现更好的答案。grunt-*没有grunt是不会发生的:)但看看这里,谁知道呢?h5bp看起来真的很有希望,但在与TeamCity代理商合作两天后,我不得不放弃。不过我还是很感谢你的推荐。我最终修改了自己的,见答案。
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);
}