我在运行 Ubuntu 16.04 和内核 4.13.0.0-36-generic 的 Dell XPS 15 上使用 Node 6.10.1 和 npm 3.10.10。 我在一个通过 cntlm 配置的企业代理后面。
当我在一个项目上运行 npm install -d
它在很短的时间内就开始工作了,过了一会儿我得到了 Error: socket hang up
。
我发现了很多关于我的问题的问题,但似乎没有任何解决方案有效。
这是 npm 配置列表
的摘录:
; cli configs
user-agent = "npm/3.10.10 node/v6.10.1 linux x64"
; userconfig /home/msb/.npmrc
https-proxy = "http://localhost:3128/"
registry = "http://urlTocorporateRegistryWhichWorksOnOtherComputers"
strict-ssl = false
; node bin location = /home/msb/.nvm/versions/node/v6.10.1/bin/node
; cwd = /home/msb
; HOME = /home/msb
; "npm config ls -l" to show all defaults.
我无法更改注册表,因为我们正在使用一些内部模块,而且我必须保留当前版本的 node/npm。
我已经试过了:
- 直接在 npm 配置中使用代理,而不是通过 cntlm
- 通过命令
trickle -s -d 100 -u 100 npm install -d
使用 trickle 限制我的上传/下载能力
另一个迹象:它适用于 Windows,我有一个同事在较慢的电脑上运行 Ubuntu 17.04,它适用于他。我们认为我的机器在请求注册表时可能有点过于残酷。有谁知道减慢 npm 请求的方法吗?
它曾经通过 yarn 工作,但一些新的发展迫使我回到 npm。
有没有人遇到并纠正过这个问题?
感谢您的帮助。
最佳答案
我在 Ubuntu 18.04 上试验了同样的问题,没有明显的原因。
最后用docker with bind mounts解决了。步骤如下:
创建一个包含以下元素的dockerfile(如果你不需要像我一样配置代理,也可以直接用使用过的镜像运行)
FROM node:6.10.1 ENV HTTPS_PROXY "http://yourproxy:yourport/" # Different RUN commands to configure npm and git corporate proxy WORKDIR /home/root/
构建图像(来自 dockerfile 的文件夹):
docker image build -f npm-installer/Dockerfile -t custom-npm-installer .
- 进入通常运行的项目文件夹
npm install
- 运行以下命令以交互方式运行容器:
docker container run -it --network host -v </host/path/to/pj>:/home/root/pj-to-install --name custom-npm-installer custom-npm-installer bash
您现在可以运行 npm install
来自容器的命令。但是要小心,然后您需要使用 chmod
在 node_modules 文件夹中递归,因为容器默认使用 root。
另一件事,如果您使用的是 node-sass,它大部分时间都是在安装 npm 时即时编译的,并且与您的操作系统当前版本/架构相匹配。因此,如果您的 Linux 发行版与容器的发行版不完全相同,您可能需要在运行 npm install
后在主机上重新编译 node-sass。在容器上。不过不用担心,node-sass 会在您启动应用程序时为您提供运行命令。
关于npm 3.10.10安装socket挂起报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49055140/