对于 npm 包的间接依赖包升级,大家有没有比较好的做法?

2022-04-30 10:31:38 +08:00
 yazoox

现在有一个包,被给多包依赖,比如 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 还是单独的。

大家都是怎么管理和升级间接依赖包的?或者如何快速找到单独一个版本包的依赖树 /链条?

谢谢!

3064 次点击
所在节点    JavaScript
12 条回复
renmu123
2022-04-30 10:40:50 +08:00
为什么要升?多个库的依赖跨大版本升级,多半要挂
yazoox
2022-04-30 10:42:27 +08:00
@renmu123
安全工具扫描,ansi-regex, 低于 5.0.1 的版本,都有重大安装漏洞,必须要升级!
否则,天天发邮件,然后上报......
yazoox
2022-04-30 10:47:19 +08:00
总不能,在 package.json 的 resolutions 里面,强制 "ansi-regex": "^6.0.1" 吧?

......
hellohy
2022-04-30 11:46:47 +08:00
@yazoox 你这不是知道方法么
FreshOldMan
2022-04-30 11:54:51 +08:00
npm 这样真辣鸡,每个版本都下一份。cocopods 包管理只允许一个版本的三方库
alanhe421
2022-04-30 11:58:58 +08:00
@yazoox 我是这么干的,这招也有利有弊,毕竟存在 repo 直接间接需要共存不同版本的同名包。

所以
1. 尽可能让第三方包自己去升级
2. 如果第三方没有更新,只能 resolution 强行执行,但得自己确保 OK ,一般 semvor 第二 /三位都是兼容的,还好。但不排除个别坑爹情况。
alanhe421
2022-04-30 12:00:53 +08:00
3. 如果存在不同大版本的,又第三方包又没有自己去更新,强行指定又会带来 breaking change ,那没办法了,要么换包,要么不用了。算是无简单解。

毕竟依赖的就是黑盒,算是交付了别人维护管理。
isbase
2022-04-30 13:14:44 +08:00
自己强行指定版本容易出问题,尤其是差了大版本的情况。最好是找出是哪些包依赖了它,然后去升级这些包或者替换这些包
TabGre
2022-04-30 21:31:23 +08:00
流水线扫描? :dog:
hamsterbase
2022-05-01 01:47:25 +08:00
把依赖用 webpack 打包成单文件,然后直接把打包结果放到源码里。

好处
1. 安装快
2. 一次打包,一劳永逸

缺点
1. 源码变大 (用 git lfs 解决
2. tree shake 失效 (只打包 node 相关依赖,这个缺陷忽略
3. 依赖更新不及时 (定期更新,更新后再次打包
hamsterbase
2022-05-01 01:54:52 +08:00
再多说一点


依赖主要分为
1. 前端生产依赖
2. 开发工具链依赖


生产依赖需要精挑细选,只用社区的精品库。一般不会有间接依赖的问题。


开发工具链依赖通过 pkg ,rollup 等方法打包到一起。 稳定,可靠。
Envov
2022-05-09 15:20:58 +08:00
答案是不能升级,你只能升级你项目的直接依赖,你依赖的包的依赖你是管不了的,想管的话就 fork 下来自己发包(巨大的工作量)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/850177

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX