首页
学习
活动
专区
圈层
工具
发布
技术百科首页 >Yarn >Yarn 和 npm 在依赖提升策略上有什么不同?

Yarn 和 npm 在依赖提升策略上有什么不同?

词条归属:Yarn

1. npm 的扁平化提升

  • npm 采用扁平化(flat)的 node_modules 结构,尽可能多地把包提升到顶层目录以减少重复
  • 这种做法简单且兼容几乎所有工具,但会带来幽灵依赖(phantom dependency)问题:代码可以 require 到从未在 package.json 中声明、却恰好被提升到顶层的包
  • 一旦传递依赖调整了自己的依赖,这类未声明的引用就可能突然失效

2. Yarn 的提升与隔离策略

  • Yarn Classic 同样使用扁平化的 node_modules,提升逻辑与 npm 相近,也存在类似的幽灵依赖风险
  • Yarn Modern 的 Plug'n'Play 模式则彻底摒弃了 node_modules,改用 .pnp.cjs 映射文件直接回答"某个包在哪里"的问题,从机制上消除了幽灵依赖
  • 在 node-modules 链接器模式下,Yarn 也提供了 nmHoistingLimits 配置来限制提升范围,收紧依赖可见性

3. 确定性保障的差异

  • Yarn 很早就强制严格的确定性,Modern 的实现更严格——默认情况下若 lockfile 会被修改就直接拒绝安装,把意外变更拦截在生产之前
  • npm 5+ 也采用了 lockfile 机制,但其确定性更多依赖 package-lock.json 对目录形状的完整描述
  • 在实际工程中,Yarn 的提升算法会综合考虑 optionalDependencies、devDependencies 等因素,即使它们未被安装也会影响普通依赖的提升位置,从而减少开发与生产环境的布局差异
相关文章
NPM 和 Yarn 使用国内淘宝镜像源提升各依赖安装速度
首先查看自己是否安装 NPM,如果没有安装 NPM,请查看 下载并安装.NET Core SDK[1]
角落的白板报
2020-05-25
5.8K1
toC和toB的市场营销,在核心能力上有什么不同的要求?
做市场&运营这么久,很多人来问我ToB和ToC的市场营销,对人员的要求有何不同?我答了好几次了,在这里做个总结。
谢强byron
2020-05-12
2.6K0
包管理工具
前端的包管理工具相信大家一定不会陌生,因为每天都需要跟他打交道,新项目或者刚拉下来的前端项目都需要去 install 依赖进行包的依赖安装,大家最熟悉的应该就是 npm 了,或者国内的 npm 镜像包 cnpm ,大家熟称为淘宝镜像
离殊
2022-04-01
3.6K0
深入浅出 npm & yarn & pnpm 包管理机制
本文会以尽量简洁的语言来描述当下主流包管理工具 npm、yarn、pnpm 的管理策略以及进化史,不涉及任何晦涩的代码。
Leecason
2022-07-13
2.4K0
Npm vs Yarn 之备忘大全
有则笑话,如此讲到:“老丈人爱吃核桃,昨天买了二斤陪妻子送去,老丈人年轻时练过武,用手一拍核桃就碎了,笑着对我说:你还用锤子,你看我用手就成。我嘴一抽,来了句:人和动物最大的区别就是人会使用工具。……”。撇开这样特例场景,这句话还是非常用有道理的;毕竟从远古石器时期或更早,到如今,所言之语,所穿之衣,代步之车,所学的知识,所晓的常识.....皆是工具;可以说绝大部分人之间的差异(天才级除外),仅在于工具使用之优劣罢了。在工具的使用中,很多人极大程度上停留于会用层面,如若不遇到问题,几乎就处于停滞;这本身倒也没有问题,但可能因为没有透彻的了解,而错失了对该物可以拥有的想象力,从而错过了许多本该有的美好,如此的可惜。
晚晴幽草轩轩主
2018-02-04
2.2K0
点击加载更多
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
领券