【已解决】gyp http 404 https://registry.npmmirror.com/dist/v18.18.1/node-v18.18.1-headers.tar.gz
目录
- bug来源
- 原因
- 分析
- 解决
- .npmrc配置文件介绍
bug来源
在安装依赖的时候,到最后一部总会报下面的错误。我的环境:
- node:18.18.1
- npm:10.5
- 操作系统:mac m1
无论是降低node,还是升级node始终无法解决。
error /Users/zbs/test/temp/betpw/node_modules/deasync: Command failed.Exit code: 1Command: node ./build.jsArguments: Directory: /Users/zbs/test/temp/betpw/node_modules/deasyncOutput:gyp info it worked if it ends with okgyp info using node-gyp@10.2.0gyp info using node@18.18.1 | darwin | arm64gyp info find Python using Python version 3.9.6 found at \"/Library/Developer/CommandLineTools/usr/bin/python3\"gyp WARN EACCES current user (\"zbs\") does not have permission to access the dev dir \"/Users/zbs/Library/Caches/node-gyp/18.18.1\"gyp WARN EACCES attempting to reinstall using temporary dev dir \"/var/folders/ps/zlrjrw_j4l3cryjfx9zn236r0000gn/T/.node-gyp\"gyp http GET https://registry.npmmirror.com/dist/v18.18.1/node-v18.18.1-headers.tar.gzgyp http 404 https://registry.npmmirror.com/dist/v18.18.1/node-v18.18.1-headers.tar.gzgyp WARN install got an error, rolling back installgyp WARN install got an error, rolling back installgyp ERR! configure error gyp ERR! stack Error: 404 response downloading https://registry.npmmirror.com/dist/v18.18.1/node-v18.18.1-headers.tar.gzgyp ERR! stack at go (/opt/homebrew/lib/node_modules/node-gyp/lib/install.js:223:21)gyp ERR! stack at process.processTicksAndRejections (node:internal/process/task_queues:95:5)gyp ERR! stack at async install (/opt/homebrew/lib/node_modules/node-gyp/lib/install.js:63:18)gyp ERR! stack at async install (/opt/homebrew/lib/node_modules/node-gyp/lib/install.js:63:18)gyp ERR! stack at async getNodeDir (/opt/homebrew/lib/node_modules/node-gyp/lib/configure.js:79:7)gyp ERR! stack at async run (/opt/homebrew/lib/node_modules/node-gyp/bin/node-gyp.js:81:18)gyp ERR! System Darwin 21.6.0gyp ERR! command \"/usr/local/bin/node\" \"/opt/homebrew/bin/node-gyp\" \"rebuild\"gyp ERR! cwd /Users/zbs/test/temp/betpw/node_modules/deasyncgyp ERR! node -v v18.18.1gyp ERR! node-gyp -v v10.2.0
原因
可以从报错中下面两行,gyp http 404
gyp http GET https://registry.npmmirror.com/dist/v18.18.1/node-v18.18.1-headers.tar.gzgyp http 404 https://registry.npmmirror.com/dist/v18.18.1/node-v18.18.1-headers.tar.gz
也就是下载后面的地址之后404,找不到了,后来实测,后面的https链接确实什么都没有,且https://registry.npmmirror.com/dist/v18.18.1
链接什么都没有,说明这个链接地址是错误的
分析
正常情况下,node-gyp
应该去下面的地址下载ndoe的头部信息
https://nodejs.org/dist/vXX.XX.XX/node-vXX.XX.XX-headers.tar.gz
但是目前显示的路径是
https://registry.npmmirror.com/dist/v18.18.1/node-v18.18.1-headers.tar.gz
说明这个路径配置错了,出现 registry.npmjs.org/dist/ 的原因:
npm 配置(.npmrc 文件或环境变量)中,设置了 disturl、dist-url、nodedir、nodedir、nodejs_org_mirror、npm_config_disturl 等参数,导致 node-gyp 误用 registry 地址。
某些国内镜像(如 npmmirror、淘宝镜像)会自动在 .npmrc 里加上 disturl 或 nodedir,指向 registry 的 dist 路径。
解决
查看npm配置.npmrc
文件
vi ~/.npmrc
我的配置
registry=https://registry.npmmirror.com/NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/nodedisturl=https://registry.npmmirror.com/diststrict-ssl=falsehome=https://registry.npmmirror.com
删掉NODEJS_ORG_MIRROR
,disturl
,之后
registry=https://registry.npmmirror.com/strict-ssl=falsehome=https://registry.npmmirror.com
随后yarn
就不会报错了
.npmrc配置文件介绍
-
registry=https://registry.npmmirror.com/
作用:设置 npm/yarn 安装包时的主仓库地址(镜像源)。
影响:所有 npm install、yarn add 等命令都会从 npmmirror(原淘宝镜像)拉取包,而不是官方 npmjs.org。
用途:加速国内访问,解决 npm 官方源慢或被墙的问题。 -
NODEJS_ORG_MIRROR
作用:指定 node-gyp、node-sass 等需要下载 Node.js 二进制文件(如 headers、node-pre-gyp 包)时的镜像地址。
影响:node-gyp 编译原生模块时,会优先去这个地址下载 node 头文件和二进制包。
用途:加速 node-gyp 相关依赖的下载,适合国内网络环境。 -
disturl
作用:指定 node-gyp 下载 Node.js 头文件的地址。
影响:node-gyp 会去这个地址下载 node-vXX.XX.XX-headers.tar.gz。
用途:同样是为了解决国内下载 node headers 慢的问题。
副作用:如果镜像源没有你需要的 node 版本 headers,就会 404,导致依赖编译失败。 -
strict-ssl=false
作用:禁用 SSL 证书校验。
影响:即使镜像源的 SSL 证书不被信任,也能正常下载。
用途:有些公司内网或自建镜像证书不被信任时用。
风险:降低安全性,建议只在可信网络下使用。 -
//registry.npmjs.org/:_authToken=…
作用:为官方 npm 源配置认证 token。
影响:用于发布包、安装私有包时的身份认证。
用途:如果你有 npm 官方私有包或需要发布包,必须有这个 token。
- //ip:port/:_authToken=…
作用:为内网私有 npm 仓库配置认证 token。
影响:用于公司内部 npm 仓库的身份认证。
用途:公司内部有私有包时用。