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

本地依赖库的版本和库依赖的版本不一致如何解决?

我用的 yarn v4 版本,所以以下教程命令都基于yarn

这里假设我报错的库名字叫 XXXXXXXX,依赖他的库叫 AAAAAAAA

排查解决思路分析:

首先查看一下 XXXXXXXX 的依赖关系,执行

yarn why XXXXXXXX

首先我们要知道 yarn 自动做了库的拆分,所以不同的库依赖不同的版本的某个库是互相隔离的,我们几乎在任何时间都不需要check这个问题,除了以下几种问题

如果看到类似的输出,比如一个库依赖项是 XXXXXXXX: ^0.0.1-beta.29,但他的 node_modules 下载的却是 XXXXXXXX@0.0.1-local.8


└─ AAAAAAAA@npm:0.0.1└─XXXXXXXX@npm:0.0.1-local.8 (via npm:^0.0.1-bata.29)

那我们就先看下是不是本地有这个 cache 缓存

我们先看下项目里有没有 .yarn/cache 这个文件,如果有就查看是不是命中了缓存

如果没有这个目录,先查看 cache 目录在哪里

yarn config get cacheFolder

知道了缓存的目录后,查看是否命中

ls .yarn/cache | grep XXXXXXXX

 我的输出如下

XXXXXXXX-0.0.1-local.8-ddea0537de-10c0.zip

所以可以发现,我确实是因为命中了缓存才导致的问题,所以我们执行

yarn cache clean
yarn install

之后我发现还是没有成功,于是检查一下 yarn.lock 文件是否有锁定的版本

cat ./yarn.lock | grep XXXXXXXX

我这里输出如下,可以看到

    "XXXXXXXX": "npm:^0.0.1-bata.29"
"XXXXXXXX@npm:^0.0.1-bata.29":resolution: "XXXXXXXX@npm:0.0.1-local.8"

于是我执行

yarn cache clean
rm yarn.lock
yarn install

之后我发现还是没有解决该问题

那么几乎可以判断为,不是缓存问题,而是 yarn registry(包源)里这个版本就叫做 0.0.1-local.8,并且它“伪装”为 ^0.0.1-bata.29 的合法候选项!或者说他还没有被注册到 yarn regitstry 里。

也就是说,Yarn 从 远程 registry(yarn私有源) 获取到了一个叫:XXXXXXXX@0.0.1-local.8 的库

但它被误判为匹配:^0.0.1-beta.29

为什么 ^0.0.1-beta.29 能匹配 0.0.1-local.8

semver 标准里

  • ^0.0.1-beta.29 只允许 patch-level 的预发版本,如:

    • 0.0.1-beta.30

    • 0.0.1-rc.1

  • 如果 registry 中 0.0.1-local.8 是唯一匹配的预发版本,Yarn可能会选它,尽管它显然不是正式版本。

这说明你的环境中:

🧨 0.0.1-local.8 是注册在 yarn 或私有 registry 上的,并且是目前唯一可解的版本。

如何修复????

1. 强制指定明确版本(不是 semver 范围)「我比较推荐这种写法」

修改 package.json, 增加resolutions

"resolutions": {"XXXXXXXX": "0.0.1-beta.29"
}

⚠️ 注意:必须是完整版本号,不要写 ^0.0.1-beta.29,因为 Yarn 会再次去解析 semver 范围,从而回到 local.8

或者固定下载源 

"resolutions": {"XXXXXXXX": "https://registry.npmjs.org/XXXXXXXX/-/XXXXXXXX-0.0.1-beta.29.tgz"
}

然后执行

rm yarn.lock
yarn install

2. 明确锁定版本来源(需要使用官方 npm 源)

你可以临时限制 registry,强制从 registry.npmjs.org 获取(防止从私有源或本地镜像拿到污染版本,比如你用的淘宝源):

在 .yarnrc.yml 中制定,yarn 一般用的自己的下载源 (https://registry.yarnpkg.com)因为yarn下载比较快,所以我不建议直接这样改

npmRegistryServer: "https://registry.npmjs.org"

 然后执行

rm yarn.lock
yarn install

3. 如果还是不是你想要的版本,我们需要排查一下可用版本是否并没有被发布

yarn npm info XXXXXXXX --fields versions

如果没有 0.0.1-beta.29,那你只能:

  • 改用别的版本;

  • 或让你团队发布一个新的版本(例如 0.0.1-beta.30);

到此,我的问题解决,如果你还有其他问题,欢迎评论区留言提问 


文章转载自:

http://4Wsjosse.gstff.cn
http://pIg2kNZG.gstff.cn
http://2Sf1AAGg.gstff.cn
http://513Kbuar.gstff.cn
http://V79kzpto.gstff.cn
http://C9F7B9TI.gstff.cn
http://ikyydA4Q.gstff.cn
http://Rp78mt8W.gstff.cn
http://ccwCafPC.gstff.cn
http://uMG7Hjuz.gstff.cn
http://MM8dRCRv.gstff.cn
http://o2QjOFy2.gstff.cn
http://UElo3tgr.gstff.cn
http://6X7am5hH.gstff.cn
http://Mrdzk124.gstff.cn
http://A9C8pSjZ.gstff.cn
http://4v98eH0E.gstff.cn
http://3BTnRbG4.gstff.cn
http://dE9vnNP3.gstff.cn
http://4e362cTc.gstff.cn
http://G5jLnyIq.gstff.cn
http://4YLIMAQB.gstff.cn
http://fEgR57QG.gstff.cn
http://YNfajUMF.gstff.cn
http://VHx37Zq7.gstff.cn
http://C4JJUnyL.gstff.cn
http://3OG0MlN8.gstff.cn
http://epExaJlr.gstff.cn
http://rCFlsNib.gstff.cn
http://Mx20FkTu.gstff.cn
http://www.dtcms.com/a/214426.html

相关文章:

  • Rust 1.0 发布十周年,梦想再度扬帆起航!
  • 【杂谈】STM32使用快速傅里叶变换库函数后如何比较准确地找到n次谐波幅值
  • 【生物信息学】k-mer的基本概念及应用
  • 限制 SSH 访问仅允许特定 IP 连接
  • 【Python-Day 18】玩转函数参数:*args 与 **kwargs 终极指南
  • 华为OD机试真题——考勤信息(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
  • 树莓派4B 在系统环境安装snap7 西门子plc通讯包(佟掌柜专用)
  • 高电流测量新突破:借助铜进行温度补偿
  • 2025端午北海游玩攻略
  • ROS2基础知识
  • Linux系统:动静态库的制作与安装
  • 【向量数据库选型实战】FAISS vs Chroma vs Milvus vs Qdrant 全面对比
  • MPI实现大数据Ring Broadcast逻辑
  • 如何做好一份技术文档:从精准导航到持续迭代的实践指南
  • MySQL的基础操作
  • 【C/C++】如何在一个事件驱动的生产者-消费者模型中使用观察者进行通知与解耦
  • 无人机降落伞设计要点难点及原理!
  • 双臂机器人运动空间与干涉分析仿真技术报告
  • 仅录系统声音,不录外部噪音,详细图文教程
  • FacePoke创意交互实战:Cpolar技术赋能远程人像编辑的趣味实现
  • 鸿蒙OSUniApp 实现的一键清除输入框内容功能#三方框架 #Uniapp
  • PyTorch实现MLP信用评分模型全流程
  • 如何调试CATIA CAA程序导致的CATIA异常崩溃问题
  • 基于私有化 DeepSeek 大模型的工业罐区跑冒滴漏检测技术研究与应用
  • 网络安全之Web渗透加解密
  • 我们是如何为 ES|QL 重建自动补全功能的
  • 创建一个简易的风扇动画界面:基于 WPF 和 XAML 的实现教程
  • Google 发布AI 编程工具Jules
  • 从数据页角度理解B+树查询
  • 虚拟机配置桥接,远程工具直接访问