清除 pnpm 缓存,解决不同源安装依赖包失败的问题

发布于:2025-08-16 ⋅ 阅读:(15) ⋅ 点赞:(0)

发现问题

问题的起因是 Github Actions 中的 CI 任务一直失败。
在这里插入图片描述

排查问题

查看具体的报错信息,发现 cnpm 镜像源(r2.cnpmjs.org)的 SSL 证书已过期,导致 pnpm 无法安全下载依赖包。
在这里插入图片描述

尝试修复

尝试在 CI 工作流中设置 pnpm 的安装源。在 GitHub Actions 中配置

- name: Install dependencies
  run: |
    pnpm config set registry https://registry.npmjs.org
    pnpm install --frozen-lockfile

但仍旧出现报错,排查发现读取的 pnpm-lock.yaml 文件,这里的 tarball 直接指向了 r2.cnpmjs.org,导致 pnpm 仍然尝试从旧源下载(pnpm-lock.yaml 会锁定下载地址)
在这里插入图片描述
在本地环境设置 pnpm 的源地址

pnpm config set registry https://registry.npmjs.org/

手动删除 pnpm-lock.yaml 并重新安装依赖包,生成新的 pnpm-lock.yaml文件。对比旧的文件发现 tarball 的源地址未被修改。
怀疑是 pnpm 的缓存,导致未彻底更新。

修复问题

1. 在 .npmrc 中永久设置 registry

由于使用旧电脑安装过依赖包,导致生成了指向 cnpm 源的 pnpm-lock.yaml。因此在项目的根目录增加 .npmrc 文件,设置使用官方源,避免不同开发者/多设备开发时出现安装源地址不一致的问题。

registry=https://registry.npmjs.org/

2. 清理 pnpm 的缓存

如果之前安装过依赖,pnpm 可能会复用缓存(~/.pnpm-store),而缓存里的包仍然是旧源下载的。
执行以下命令清理缓存,重新安装依赖并生成新的 pnpm-lock.yaml

pnpm store prune    # 清除缓存
rm -rf node_modules pnpm-lock.yaml
pnpm install       # 重新安装

完成上面两步后,就可以解决问题了。欢呼🎉

后记:pnpm 源的优先级问题

pnpm 会按以下优先级读取配置:

  • 项目级 .npmrc(项目根目录)
  • 用户级 .npmrc(~/.npmrc)
  • 全局 npm/pnpm 配置

如何检查

cat .npmrc  # 查看项目级配置
cat ~/.npmrc  # 查看用户级配置
pnpm config get registry # 查看全局配置

也可以检查 pnpm-lock.yaml 中是否锁定,如果 pnpm-lock.yaml 中锁定了特定 registry,pnpm 会优先使用它:

grep "r2.cnpmjs.org" pnpm-lock.yaml  # 检查是否锁定了旧镜像源
grep "registry.npmmirror.com" pnpm-lock.yaml  # 检查是否使用了阿里云镜像

网站公告

今日签到

点亮在社区的每一天
去签到