Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何连接javascript文件并替换HTML中的引用?_Javascript_Html_Node.js_Continuous Integration_Npm - Fatal编程技术网

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

如何连接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文件中的引用替换为这个新文件。请告诉我如何才能做到这一点 到目前为止,我所尝试的:

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

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

之前:

<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);
}