【转载】package.json单独升级子依赖的版本
原文: 选择性依赖项解决
package.json
文件里的 resolutions
字段用于解析选择性版本,可以通过此功能自定义依赖版本。 这通常需要手动编辑 yarn.lock
文件。
你为什么要这么做?
-
有些时候,项目会依赖一个不常更新的包,但这个包又依赖另一个需要立即升级的包。 这时候,如果这个(不常更新的)包的依赖列表里不包含需要升级的包的新版本,那就只能等待作者升级,没别的办法。
-
项目的子依赖(依赖的依赖)需要紧急安全更新,来不及等待直接依赖更新。
-
项目的直接依赖还可以正常工作但已经停止维护,这时子依赖需要更新。 同时,你清楚子依赖的更新不会影响现有系统,但是又不想通过 fork 的方式来升级直接依赖。
-
项目的直接依赖定义了过于宽泛的子依赖版本范围,恰巧这其中的某个版本有问题,这时你想要把子依赖限制在某些正常工作的版本范围里。
如何使用它?
在 package.json
文件里添加 resolutions
字段,用于覆盖版本定义:
package.json
{
"name": "project",
"version": "1.0.0",
"dependencies": {
"left-pad": "1.0.0",
"c": "file:../c-1",
"d2": "file:../d2-1"
},
"resolutions": {
"d2/left-pad": "1.1.1",
"c/**/left-pad": "1.1.2"
}
}
之后执行 yarn install
。
提示和技巧
- 如果定义了无效的版本解析规则,比如错写了无效的包名,会收到警告。
- 如果定义的版本解析的版本号、版本范围无效,也会收到警告。
- 如果定义的版本解析规则的版本号、版本范围与原始版本范围不兼容,同样会收到警告。
限制和警告
- 嵌套包机制(Nested packages)可能会挂。
- 这是一项新功能,因此会在某些极端情况下挂掉。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)