npm 3.10.10安装socket挂起报错
npm 3.10.10 install socket hang up error
我在 Dell XPS 15 运行ning Ubuntu 16.04 和内核 4.13.0.0-36-generic 上使用 Node 6.10.1 和 npm 3.10.10。
我在通过 cntlm.
配置的公司代理后面
当我 运行 一个项目的 npm install -d
它在很短的时间内起作用,过了一会儿我得到 Error: socket hang up
.
我发现了很多关于我的问题的问题,但似乎没有任何解决方案有效。
这是 npm config list
的摘录:
; 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 限制我的 upload/download 能力
另一个迹象:它适用于 Windows,我有一个同事 运行ning Ubuntu 17.04 在较慢的电脑上,它对他有用。我们认为我的机器在请求注册表时可能有点过于残酷。有谁知道减慢 npm 请求的方法吗?
它曾经通过 yarn 工作,但一些新的发展迫使我回到 npm。
有没有人遇到并解决了这个问题?
感谢您的帮助。
我在 Ubuntu 18.04 上试验了同样的问题,没有明显的原因。
终于用docker配合bind mounts解决了。步骤如下:
创建一个docker包含以下元素的文件(如果你不需要像我一样配置代理,你也可以直接运行使用使用过的图像)
FROM node:6.10.1
ENV HTTPS_PROXY "http://yourproxy:yourport/"
# Different RUN commands to configure npm and git corporate proxy
WORKDIR /home/root/
构建图像(来自 docker 文件的文件夹):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
命令。但是请注意,您需要递归地在 node_modules 文件夹上使用 chmod
,因为容器默认使用 root。
另一件事,如果您使用的是 node-sass,它大部分时间都是在 npm 安装时即时编译的,并且与您的 OS 当前 version/architecture 相匹配。因此,如果您的 linux 分布与容器的分布不完全相同,您可能需要在容器上 运行ning npm install
之后在主机上重新编译 node-sass 。不过不用担心,node-sass 会在您启动应用程序时给您命令 运行。
我在 Dell XPS 15 运行ning Ubuntu 16.04 和内核 4.13.0.0-36-generic 上使用 Node 6.10.1 和 npm 3.10.10。 我在通过 cntlm.
配置的公司代理后面当我 运行 一个项目的 npm install -d
它在很短的时间内起作用,过了一会儿我得到 Error: socket hang up
.
我发现了很多关于我的问题的问题,但似乎没有任何解决方案有效。
这是 npm config list
的摘录:
; 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 限制我的 upload/download 能力
另一个迹象:它适用于 Windows,我有一个同事 运行ning Ubuntu 17.04 在较慢的电脑上,它对他有用。我们认为我的机器在请求注册表时可能有点过于残酷。有谁知道减慢 npm 请求的方法吗?
它曾经通过 yarn 工作,但一些新的发展迫使我回到 npm。
有没有人遇到并解决了这个问题?
感谢您的帮助。
我在 Ubuntu 18.04 上试验了同样的问题,没有明显的原因。
终于用docker配合bind mounts解决了。步骤如下:
创建一个docker包含以下元素的文件(如果你不需要像我一样配置代理,你也可以直接运行使用使用过的图像)
FROM node:6.10.1 ENV HTTPS_PROXY "http://yourproxy:yourport/" # Different RUN commands to configure npm and git corporate proxy WORKDIR /home/root/
构建图像(来自 docker 文件的文件夹):
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
命令。但是请注意,您需要递归地在 node_modules 文件夹上使用 chmod
,因为容器默认使用 root。
另一件事,如果您使用的是 node-sass,它大部分时间都是在 npm 安装时即时编译的,并且与您的 OS 当前 version/architecture 相匹配。因此,如果您的 linux 分布与容器的分布不完全相同,您可能需要在容器上 运行ning npm install
之后在主机上重新编译 node-sass 。不过不用担心,node-sass 会在您启动应用程序时给您命令 运行。