大家怎么解决 node_modules 里面, 引用的第三方包的深度依赖需要升级,但是直接依赖“不 需要/想 升级”的情况?

2021-04-07 11:24:50 +08:00
 yazoox

比如,现在需要升级 ssri 到 v8.0.1,因为报了 security issue 。webpack, storybook,都是依赖 ssri 的(好多层深度),只是依赖的版本比较低,比如 v6.0.1 或者 v8.0.0

可是,暂时不想把 webpack 或者 stroybook 升级到最新(比如,可能会有一堆新问题要解决,或者即使升级到最新版,他们引用的依赖,依然还是老的版本的情况,etc.)

npm 提供了一个方案,比如,package.json 里面,使用 resolutions,强制指定 ssri 到^ 8.0.1 版本,是可以解决这个问题的。

不过,貌似该方法有一个“大坑”,就是,如果以后,我们添加了其它的包,比如 abc,它依赖 ssri v9.0.0,我们是不知道的。npm/yarn install 时,还是使用^ 8.0.1 的版本。除非使用 abc 这个包的人,自己知道,这个包是依赖 ssri v9.0.0,然后去 resolutions 里面把指定的版本,改成 "ssri": "^v9.0.0"。但通常,一般人是不会去看自己引入的包,有哪些依赖的吧......

(不知道我的理解对不对,如果不对,请指正)

大家有没有比较好的方法 /方案,解决类似的问题?

refer: https://classic.yarnpkg.com/en/docs/selective-version-resolutions/

1188 次点击
所在节点    JavaScript
8 条回复
murmur
2021-04-07 11:29:24 +08:00
我们的 node_modules 改动过的部分直接传了 git,整个 node_modules 有完整的 zip 打包,如果谁依赖出问题全包替换就行

当然原则是,除非必须,坚决不升级
whypool
2021-04-07 11:39:25 +08:00
锁版本,不升级
DOLLOR
2021-04-07 11:43:48 +08:00
把 node_modules.7z 提交到 git 上。
muzuiget
2021-04-07 14:16:52 +08:00
要么全升,要么全不升。workaround 就是 workaround,迟早要解决的,搞得那么复杂反把自己绕晕。
xrr2016
2021-04-07 18:02:00 +08:00
指定插件的 peerDependencies,让插件使用项目的依赖包,不过这样需要自己去 fork 一份
Mutoo
2021-04-07 18:50:59 +08:00
第三方包依赖不同版本的话,会在它们自己的目录创建 node_modules 下载对应的版本,并不会跟你的直接依赖冲突。它们目录下的同名包有更高的优先级被 import 。这个是 npm 一开始设计出来就解决的问题。
libook
2021-04-08 12:06:01 +08:00
可以改 package-lock.json 来临时升级,部署的时候用 npm ci 而不是 npm install,npm audit fix 和 GitHub 的漏洞扫描应该都是用的这种处理方案。

然后轮子长期不维护或者明确表示不愿意升级依赖,就自己 fork 一份,然后改依赖,提 PR,主项目合并 PR 之前在 package.json 里用自己 fork 的版本。
stabc
2021-04-08 22:39:07 +08:00
因为酸酸乳

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

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

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

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

© 2021 V2EX