pnpm 下载依赖更换源不生效

后端2 min
#Node#pnpm
目录(4)

背景

今天下载依赖的时候,突然报错 WARN  GET https://registry.npm.taobao.org/cz-conventional-changelog error (CERT_HAS_EXPIRED). ,查阅信息以后发现是淘宝源的域名过期了。 后来就尝试更换域名进行下载包。发现不论是 CLI 更改,还是项目中的 .npmrc 更改都不生效。 纠结一天终于找到了原因。

复现场景

本地设置淘宝源, 项目设置私有仓库(下载私有包需要)。

  1. pnpm 下载所有依赖
  2. 域名过期后尝试多重换源方式。
    1. 本地换源。
    2. 项目换源。
    3. 指定临时源。

众所周知,npm 下包取源的规则是 临时 => 项目 => 用户 => 全局

但是在实际使用过程中有一个非常诡异的 case ,就是我本地项目注释源配置。 此时不论是采用临时指定源,还是使用某人源下载包均失败。 如图所示:

结论

经过验证,发现 pnpm 会记录首次下载依赖的源配置,在 add 新依赖的时候,它会对旧依赖从旧源里进行比对(这里是推测)。当项目里没有配置源的时候,它就采用了它记录的默认源地址。 这时候因为淘宝源的域名问题,导致访问失败。从而没办法下载新包。

解决方式

  1. 配置正确的源地址,私有包链接私有仓库,三方包走能用的镜像源站。
  2. rm -rf node_moduls
  3. pnpm install