现在有一个包,被给多包依赖,比如 ansi-regex
我发现我们产品的 yarn.lock 里面有 N 个这样的包,ansi-regex@^2.0.0 , ^3.0.0, 一直到 ^6.0.1,各种版本都有。
使用 yarn why ansi-regex 刷出来一片一片的。我也尝试了,
yarn why ansi-regex@^2.0.0 指定版本,好像不工作,不能找到指定版本的依赖树?
现在,我想把这些 ansi-regex 低于 6.0 的版本,全部升级到 6.0.1 最新版,有什么好办法? 总不能一个一个依赖,反向查回去, 有 N 级依赖,这样查,会死人的...
也试过去重工作,比如 yarn-deduplicate ,但这些工具,只能把同一个大版本号的,合在一起。
比如,
ansi-regex@^5.0.0, ansi-regex@^5.0.1
version "5.0.1"
ansi-regex@^6.0.0, ansi-regex@^6.0.1
version "6.0.1"
但是 2.0.0, 以及 3.0.0 还是单独的。
大家都是怎么管理和升级间接依赖包的?或者如何快速找到单独一个版本包的依赖树 /链条?
谢谢!
1
renmu123 2022-04-30 10:40:50 +08:00 via Android
为什么要升?多个库的依赖跨大版本升级,多半要挂
|
2
yazoox OP |
3
yazoox OP 总不能,在 package.json 的 resolutions 里面,强制 "ansi-regex": "^6.0.1" 吧?
...... |
5
FreshOldMan 2022-04-30 11:54:51 +08:00
npm 这样真辣鸡,每个版本都下一份。cocopods 包管理只允许一个版本的三方库
|
6
alanhe421 2022-04-30 11:58:58 +08:00
@yazoox 我是这么干的,这招也有利有弊,毕竟存在 repo 直接间接需要共存不同版本的同名包。
所以 1. 尽可能让第三方包自己去升级 2. 如果第三方没有更新,只能 resolution 强行执行,但得自己确保 OK ,一般 semvor 第二 /三位都是兼容的,还好。但不排除个别坑爹情况。 |
7
alanhe421 2022-04-30 12:00:53 +08:00
3. 如果存在不同大版本的,又第三方包又没有自己去更新,强行指定又会带来 breaking change ,那没办法了,要么换包,要么不用了。算是无简单解。
毕竟依赖的就是黑盒,算是交付了别人维护管理。 |
8
isbase 2022-04-30 13:14:44 +08:00
自己强行指定版本容易出问题,尤其是差了大版本的情况。最好是找出是哪些包依赖了它,然后去升级这些包或者替换这些包
|
9
TabGre 2022-04-30 21:31:23 +08:00
流水线扫描? :dog:
|
10
hamsterbase 2022-05-01 01:47:25 +08:00 via iPhone
把依赖用 webpack 打包成单文件,然后直接把打包结果放到源码里。
好处 1. 安装快 2. 一次打包,一劳永逸 缺点 1. 源码变大 (用 git lfs 解决 2. tree shake 失效 (只打包 node 相关依赖,这个缺陷忽略 3. 依赖更新不及时 (定期更新,更新后再次打包 |
11
hamsterbase 2022-05-01 01:54:52 +08:00 via iPhone
再多说一点
依赖主要分为 1. 前端生产依赖 2. 开发工具链依赖 生产依赖需要精挑细选,只用社区的精品库。一般不会有间接依赖的问题。 开发工具链依赖通过 pkg ,rollup 等方法打包到一起。 稳定,可靠。 |
12
Envov 2022-05-09 15:20:58 +08:00
答案是不能升级,你只能升级你项目的直接依赖,你依赖的包的依赖你是管不了的,想管的话就 fork 下来自己发包(巨大的工作量)
|