我在运行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 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。
我已经尝试过了:
trickle -s -d 100 -u 100 npm install -d
另一个迹象:它适用于 Windows ,我有一个同事在较慢的PC上运行 Ubuntu 17.04 ,它适用于他。我们认为在申请注册表时我的机器可能有点过于残酷。有没有人知道减慢npm请求的方法?
它曾经通过纱线工作,但一些新的发展迫使我回到npm。
有没有人遇到并纠正过这个问题?
感谢您的帮助。
答案 0 :(得分:0)
我在Ubuntu 18.04上实验了相同的问题,没有明显的原因。
我终于将docker与bind mount一起使用来解决它。步骤如下:
使用以下元素创建一个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
命令。但是请小心,由于容器默认情况下使用root,因此您需要在 node_modules 文件夹上递归使用chmod
。
另一件事,如果您使用的是node-sass,则大多数时间是在npm安装时即时编译的,并且与您的OS当前版本/体系结构匹配。因此,如果您的Linux发行版与容器的发行版不完全相同,则可能需要在容器上运行npm install
之后在主机上重新编译node-sass。不用担心,node-sass将在启动应用程序时为您提供运行命令。