npm 是如何处理多版本依赖的?
两种模式
nest 模式
基本行为:在 require/import 时,向上递归查找依赖,直到全局 node_modules 结束。
特点:每个包在自己内部管理依赖,结构清晰简单。
不足:如果 A 包和 B 包都依赖了 axios,就会导致 axios 在 A 包和 B 包的 node_modules 中各安装一次,产生重复安装。
flat 模式
基本模式:在 require/import 时,向上递归查找依赖,直到全局 node_modules 结束。
特点:在 npm install 时,npm 会将 axios 这种被多个包依赖的包提升到项目根目录的 node_modules 中。减少重复安装。
不足:重复安装只是被缓解了,没有完全解决。
为什么说 flat 模式并没有完全解决重复安装的问题?
考虑如下依赖关系:
如果对上图应用 flat 模式,我们会遇到一个问题:当 npm 遍历 A 包和 B 包,发现公共依赖 axios@1.0,决定将 axios@1.0 提升到项目根目录的 node_modules 中。
接下来遍历 B 包和 C 包,发现也有公共依赖 axios@2.0,但是根目录已经被 axios@1.0 占用了,所以只能放弃提升,也就又出现了 nest 模式的重复安装问题。
技术前沿拓展
前端开发,你的认知不能仅局限于技术内,需要发散思维了解技术圈的前沿知识。细心的人会发现,开发内部工具的过程中,大量的页面、场景、组件等在不断重复,这种重复造轮子的工作,浪费工程师的大量时间。
介绍一款程序员都应该知道的软件JNPF快速开发平台,很多人都尝试用过它,它是功能的集大成者,任何信息化系统都可以基于它开发出来。
这是一个基于 Java Boot/.Net Core 构建的简单、跨平台快速开发框架。前后端封装了上千个常用类,方便扩展;集成了代码生成器,支持前后端业务代码生成,实现快速开发,提升工作效率;框架集成了表单、报表、图表、大屏等各种常用的 Demo 方便直接使用;后端框架支持 Vue2、Vue3。如果你有闲暇时间,可以做个知识拓展。
看完本文如果觉得有用,记得点个赞支持,收藏起来说不定哪天就用上啦~
评论