当前位置: 首页 > news >正文

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

发现问题

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

排查问题

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

尝试修复

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

- name: Install dependenciesrun: |pnpm config set registry https://registry.npmjs.orgpnpm 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  # 检查是否使用了阿里云镜像
http://www.dtcms.com/a/332381.html

相关文章:

  • “大模型”技术专栏 | 浅谈基于 Kubernetes 的 LLM 分布式推理框架架构:概览
  • 力扣 hot100 Day74
  • Floyd 判圈算法(龟兔赛跑算法)
  • LeetCode热题100--146.LRU缓存--中等
  • SSL和TLS协议的消息认证码(MAC)
  • Grafana 与 InfluxDB 可视化深度集成(一)
  • Grafana 与 InfluxDB 可视化深度集成(二)
  • LeetCode 刷题【42. 接雨水】
  • RecyclerView 性能优化:从原理到实践的深度优化方案
  • 新手向:Python函数定义与参数传递(位置参数、关键字参数、默认参数)
  • electron之win/mac通知免打扰
  • 什么是接口?PHP如何使用 SessionHandlerInterface 接口实现Session自定义会话数据存储
  • cloudflare缓存配置
  • 【Mysql语句练习】
  • 20250815在荣品RD-RK3588-MID开发板的Android13下点卡迪的7寸LCD屏
  • Redisson分布式锁实战指南:原理、用法与项目案例
  • LINUX软件编程 -- IO
  • Microsoft Visual Studio常用快捷键和Windows系统常用快捷键的整理
  • python合并两个字典
  • 【Javaweb学习|黑马笔记|Day1】初识,入门网页,HTML-CSS|常见的标签和样式|标题排版和样式、正文排版和样式
  • java + html 图片点击文字验证码
  • 谈谈《More Effective C++》的条款30:代理类
  • initdata段使用方式
  • 图论——Djikstra最短路
  • 英文PDF翻译成中文怎么做?试试PDF翻译工具
  • 【学习笔记】Java并发编程的艺术——第7章 Java中的13个原子操作类
  • C#---StopWatch类
  • C++设计模式:类间关系
  • Linux Namespace隔离实战:dd/mkfs/mount/unshare构建终极沙箱
  • PCB沉金工艺解析:高端电子制造的可靠基石