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

清除 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.xdnf.cn/news/18026.html

相关文章:

  • electron之win/mac通知免打扰
  • 【R语言】R 语言中 gsub 与正则表达式详解(含 POSIX 与 Perl 风格实例)
  • 汽车电子:现代汽车的智能核心
  • [激光原理与应用-287]:理论 - 波动光学 - 电磁波既能承载能量,又能承载信息?
  • 【软件设计模式】前置知识类图、七大原则(精简笔记版)
  • Spark 运行流程核心组件(二)任务调度
  • EN/IEC 55015 照明设备的电磁兼容标准安全
  • Docker Compose部署Clickhouse最新版
  • 【LINUX网络】HTTP协议基本结构、搭建自己的HTTP简单服务器
  • 为什么游戏会出现“卡顿”:`clock.tick()` v.s. `clock.get_fps()`
  • 【uni-app】根据角色/身份切换显示不同的 自定义 tabbar
  • 线性代数 · 直观理解矩阵 | 空间变换 / 特征值 / 特征向量
  • CERT/CC警告:新型HTTP/2漏洞“MadeYouReset“恐致全球服务器遭DDoS攻击瘫痪
  • 机械加工元件——工业精密制造的璀璨明珠
  • Day14: Flask太空站搭建指南:从零到超光速的Web开发之旅
  • git clone https://gh.llkk.cc/
  • C++从入门到实战(十九)C++ vector容器及其常用接口
  • 电子电路学习日记
  • qt项目中解决关闭弹窗后执行主界面的信号槽时闪退问题
  • MySql——聚簇索引(主键索引)和非聚簇索索引(非主键索引)引区别(即聚集索引和非聚集索引区别)
  • Java 学习笔记(基础篇2)
  • Docker build创建镜像命令入门教程
  • **超融合架构中的发散创新:探索现代编程语言的挑战与机遇**一、引言随着数字化时代的快速发展,超融合架构已成为IT领域的一种重要趋势
  • ts概念讲解
  • Vue 3 + TypeScript:package.json 示例 / 详细注释说明
  • 基于Java飞算AI的Spring Boot聊天室系统全流程实战
  • 快速部署一个鉴黄服务
  • 前端vue框架
  • 【机器人-开发工具】ROS 2 (4)Jetson Nano 系统Ubuntu22.04安装ROS 2 Humble版本
  • 【Java 后端】Spring Boot 集成 JPA 全攻略