拦截对npmjs.org等的传出HTTP请求

时间:2018-05-14 04:30:18

标签: node.js http npm proxy reverse-proxy

我希望创建一个本地运行的Node.js服务器,它可以拦截对NPM注册表的传出请求(npmjs.org或其他)。

这是反向代理吗?

基本上我想要做的是创建一个本地运行的NPM注册表 - 这是用于本地运行的Docker容器。通常我只会使用npm link进行本地开发。但是当在本地使用Docker测试库时,使用npm link变得难以实现

我知道有一些库设置了本地NPM注册表,但我希望从头开始这样做,所以我可以为我的用例设置它。基本上我想在每次npm install请求进入时tarball我的文件系统上存在的包。

我开始尝试:

npm config set registry http://localhost:3440

但是当我随后执行npm install时,它似乎没有点击我本地运行的服务器,只是像往常一样去了registry.npmjs.org

我也尝试修改/ etc / hosts

之前:

127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost

后:

127.0.0.1   localhost
255.255.255.255 broadcasthost
::1             localhost
registry.npmjs.org localhost:3440

但我在侦听端口3440的本地服务器似乎没有拦截任何流量。

1 个答案:

答案 0 :(得分:1)

反向代理,但这是转发代理。你必须有效地使用npm config set proxy从npm call中使用它。

用于此类代理的主要工具通常是squid代理。而且我非常确定您可以使用一些众所周知的转发代理工具而不是自定义nodejs工具来构建更强大且功能更全的服务。

然后你必须检查这个服务的运行位置(在同一个docker上?在你主机上的另一个docker上?)。您在npm config set proxy中为npm设置的地址必须可以从运行npm的容器内部解析(但在Dockerfile步骤上运行的命令与在该构建之后在bash会话中运行的命令之间可能会有所不同。)