npm 停止的有趣问题,然后在开发 Windows/WSL2 Ubuntu 机器上再次运行。
Windows 10、运行 Ubuntu 22.04 LTS 的 WSL2。网络上没有代理或额外的防火墙。
package.json(部分)
"devDependencies": {
"react-email": "3.0.2"
}
然后安装
# will reliably fail each time if I do this
npm cache clean --force
# will fail the first time
# then work if I run it again
npm install --verbose
会这样坐6个小时,然后继续或Ctrl C退出,然后:
再次运行,就可以了。
我是 Node 和 npm 的初学者。
该问题似乎源于在 Windows/WSL2 环境中使用
npm
时的一些常见原因,尤其是在 Ubuntu 中。以下是针对此设置量身定制的分步故障排除指南:
清除npm和Node缓存: 有时,缓存不一致可能会导致
npm
停止或失败。由于您已经在使用 npm cache clean --force
,因此已涵盖此步骤,但您可能还想清除 nvm
(节点版本管理器)的缓存以排除进一步的缓存问题。
nvm cache clear
确保一致的权限: WSL2 和
npm
可能存在权限问题,从而导致延迟。确保您的 ~/.npm
和 ~/.config
目录具有正确的权限:
sudo chown -R $(whoami) ~/.npm
sudo chown -R $(whoami) ~/.config
设置 npm 的网络配置: 有时,WSL2 中的缓慢网络配置会影响
npm
获取包的能力。您可以尝试配置不同的注册表超时,看看是否可以缓解停顿问题:
npm set fetch-retry-mintimeout 20000
npm set fetch-retry-maxtimeout 120000
npm set fetch-retry-factor 10
在 npm 中禁用 IPv6(如果适用): 在某些情况下,npm 可能默认使用 IPv6,这可能会导致某些网络设置出现问题。禁用它可能会改善连接并防止停顿。
npm set prefer-online false
npm set use-ipv4 true
检查 DNS 配置: WSL2 可能存在影响
npm
安装的 DNS 解析问题。您可以通过修改您的 /etc/resolv.conf
文件来更新您的 DNS 设置以使用可靠的 DNS 服务(例如 Google DNS 或 Cloudflare DNS):
sudo nano /etc/resolv.conf
添加以下行:
nameserver 8.8.8.8
nameserver 8.8.4.4
暂时使用不同的 npm 镜像: 将注册表更改为镜像可以帮助防止默认
npm
注册表出现特定连接问题。
npm set registry https://registry.npmjs.org/
验证 nvm 和节点版本: 有时,某些版本的
npm
和 node
会存在导致意外行为的错误。您可能想尝试 Node.js 的稳定 LTS 版本,例如 18.x
或 20.x
,而不是 22.11.0
。
nvm install 20
nvm use 20
运行
npm install
两次作为临时解决方案:
正如您所注意到的,安装有时会在第二次运行 npm install
后完成。如果您很着急,此解决方法可能暂时足够,但最好按照上述步骤找到根本原因。
检查WSL2的网络配置: WSL2 在某些版本的 Windows 10 中存在已知的网络问题。确保您运行的是应用了所有更新的最新版本的 Windows,并考虑更新您的 WSL2 安装:
wsl --update
启用详细日志记录以获取更多详细信息: 为了更深入地了解停顿期间发生的情况,您可以启用更详细的日志记录:
npm install --loglevel=silly
遵循这些步骤应该有助于缩小问题范围。