升级npm至8.1.2后执行npm publish为何尝试访问github.com?
问题原因分析
- npm 8.x版本对
npm publish命令的行为做了调整,尤其是发布子目录(比如你用的dist/{{project}})时,会更严格地处理包的仓库配置:- 若发布的子目录下的
package.json未显式配置repository字段,npm 8会尝试从当前项目的Git远程仓库信息自动生成该字段。如果你的主项目Git远程指向GitHub,就会出现错误日志里那种错误拼接的地址——把子目录路径直接附加到GitHub域名后,形成ssh://git@github.com/dist/{{project}}.git这种无效路径。 - 虽然主项目的
package.json设置了"private": true,但你发布的是子目录,npm 8不会继承父目录的private配置,而是会检查子目录自身的package.json。如果子目录的package.json没设置private相关配置,npm 8会按公开包的逻辑去验证Git仓库信息,而npm 6.x版本不会执行这个额外校验。
- 若发布的子目录下的
- 此外,npm 8.x增强了Git相关操作的校验逻辑,发布过程中会主动执行
git ls-remote命令验证仓库可用性,而npm 6.x版本发布私有仓库包时会跳过这一步。
解决建议
- 确保
dist/{{project}}目录下的package.json:- 显式设置
"private": false(因为你要发布这个包) - 正确配置
repository字段指向你的私有仓库地址;如果不需要该字段,直接设为"repository": {}空对象,阻止npm自动生成。
- 显式设置
- 或者执行发布命令时添加
--no-git-checks参数,跳过Git相关校验:npm publish dist/{{project}} --no-git-checks
内容的提问来源于stack exchange,提问作者Zze
相关产品推荐
相关产品推荐

