yarn、pnpm、npm - 指南

news/2025/10/6 19:34:38/文章来源:https://www.cnblogs.com/tlnshuju/p/19127849

yarn、pnpm、npm - 指南

2025-10-06 19:32  tlnshuju  阅读(0)  评论(0)    收藏  举报

非常好,这样从“问题驱动 → 设备诞生 → 优化演进”的角度来讲,更清晰易懂。下面我按时间线和动机,把 npm → yarn → pnpm 的演变脉络讲清楚。


? 一、npm 为什么一开始不够好?

早期(npm v4 及之前)的障碍重要集中在以下几个方面:

  1. 安装不确定性(非确定性安装)

npm 安装依赖是不稳定的,即使锁版本,也有可能在不同机器上装出不同的 node_modules。

这会导致:“我能跑,你不能跑”,非常影响团队协作。

  1. 性能慢

安装过程是串行的,一次只装一个包;

网络差的时候往往失败,尤其在国内。

  1. 缺少锁资料(旧版本)

npm 最早没有 package-lock.json,版本解析随时间变;

即使后来加入,也没能彻底解决一致性问题。

? 所以,这时候 Facebook 出手了,搞了Yarn。


? 二、Yarn 为什么出现?解决了哪些难题?

? 背景:

Facebook 的工程师维护着数千个Node项目,npm 的不稳定、速度慢,严重拖累开发效率,于是他们造了 Yarn。

? Yarn 主要解决了这些困难:

  1. 确定性安装(Deterministic)

引入 yarn.lock 锁材料,强制保证在任何机器安装都一样。

  1. 性能优化

支持并发安装,比 npm 快很多;

采用本地缓存,第二次安装极快。

  1. 离线安装

允许直接从本地缓存装包,断网也能装。

  1. 更好的 CLI 体验

命令更直观:yarn add, yarn remove;

信息提示也更美观清晰。

? 总结:Yarn 是对 npm 早期缺陷的“性能增强 + 确定性修复”。


⚡ 三、那为什么后来又有了 pnpm?Yarn 还不够好吗?

? Yarn 的问题:

虽然 Yarn 比 npm 好,但它还是沿用了 npm 的核心模式:

所有依赖被“平铺”安装在 node_modules 根目录;

重复项目会占用大量磁盘空间;

幽灵依赖问题(依赖没有声明但能用)仍然存在。

? 这时 pnpm 出现了,它的核心思想是:

? 极致性能 + 更强的依赖隔离 + 节省磁盘空间

? pnpm 处理了哪些 yarn 没解决的问题?

  1. 重复依赖占用空间严重

yarn 和 npm:每个项目都复制依赖;

pnpm:使用内容寻址 + 硬链接,依赖只下载一次,多个任务共享。

? 举个例子:

你有 10 个工程都用React,npm/yarn 会有 10 个 react 包; pnpm 只会下载 1 次,继而“硬链接”给每个项目用。

  1. 严格依赖隔离

pnpm 不允许访问未声明依赖(幽灵依赖会报错);

让你必须明确声明每个依赖,更安全、规范。

  1. 极速安装体验

比 yarn 还快得多(即便是第一次安装);

CI/CD、Monorepo 项目效率提升明显。


? 四、总结一下三者的“出现背景 & 问题驱动”

软件 出现时间 为什么会出现 解决了什么难题

npm 最早Node.js官方包管理器 提供基础的依赖管理功能
yarn 2016 为了解决 npm 安装不稳定、慢、无法离线等问题 锁文件、缓存、并发、确定性安装
pnpm 2017 为了解决重复依赖空间浪费、幽灵依赖、安装速度瓶颈 内容寻址 + 严格隔离 + 极速安装


✅ 最终的建议(根据实际情况选择)

✅ 新项目推荐利用 pnpm(快、省、规范);

? 历史使用 yarn 的行继续用,也很稳定;

? 小型项目或者默认使用可选 npm,方便不用额外安装。


如果你想继续,我能够带你写个从 yarn 或 npm 切换到 pnpm 的实战迁移指南,也许可讲讲它们在 Monorepo 里的表现。需要吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929636.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站流量多少做网盟工程招标平台

SqlSessionFactoryBuilder.build创建SqlSessionFactory(粗略走一步流程) 看完上篇文章后,你对mybatis应该有个大概的了解了,那么我们知道new SqlSessionFactoryBuilder().build是框架的入口,我们到SqlSessionFactoryB…

基于Linux环境docker封装exe

基于Linux环境docker封装exepre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

迈向人机价值共生文明:AI元人文范式下的演化架构与协同治理

迈向人机价值共生文明:AI元人文范式下的演化架构与协同治理 引言:超越价值对齐的必然之路 在人工智能发展的当前阶段,我们正面临一个根本性困境:传统“价值对齐”范式试图通过预设规则或优化目标函数将人类价值“灌…

文件存储空间管理

存储空间的划分与初始化 文件卷可以由多个文件磁盘组成 空闲表法 记录了每一个空闲区局的起始地址和结束地址 分配:与内存管理中的动态分区分配很类似,为一个文件分配连续的存储空间,同样可以有首次适应,最佳适应,…

ubuntu之开机自启frpc - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

详细介绍:关于ios点击分享自动复制到粘贴板的问题

详细介绍:关于ios点击分享自动复制到粘贴板的问题pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

电子商务网站建设百度文库wordpress获取页面的当前位置

DOS常见命令 DOS是什么如何打开DOScmd常见的命令集合 DOS是什么 DOC命令是我们浏览器中的终端 ,但不同的是我们打开软件的方式 使用的是点击文件图标,点击图标的同时 我们也相当于使用一个命令 只是我们看不见而已 在电脑上操作的时候 通常都是使用命令…

新一代数据平台替代传统大数据技术栈

初创公司Definite获得1000万美元种子轮融资,推出全栈式AI原生数据平台,旨在替代笨重的大数据仓库、连接器和商业智能工具,提供更简单高效的数据分析解决方案。初创公司Definite获资1000万美元,旨在替代笨重大数据技…

攻击者如何绕过macOS内置安全防护机制

本文深入解析macOS核心安全机制(Keychain、SIP、TCC、文件隔离和Gatekeeper)的工作原理,展示攻击者常用的绕过技术,并提供基于Sigma规则的检测方案,帮助提升macOS系统安全防护能力。攻击者如何适应macOS内置防护机…

Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等) - 指南

Python趣学篇:交互式词云生成器(jieba + Tkinter + WordCloud等) - 指南2025-10-06 19:17 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x:…

做图表的网站做新媒体的小说网站

计算机视觉三大国际顶级会议之一的 ECCV 2020 已经召开。今年 ECCV 共收到有效投稿 5025 篇,是 ECCV 2018 论文投稿数量的二倍还要多,接收论文1361 篇,接收率为 27%,相比上届会议下降了约 5%。在接收论文中,oral论文数…

一台主机做两个网站网站建设企业需要准备资料

CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制,CORS在很多地方都有被使用,微信支付的JS支付就是通过JS向微…

潍坊网站制作发怎么做免费网站教程

mybatis-plus 是一款 Mybatis 动态 SQL 自动注入 Mybatis 增删改查 CRUD 操作中间件, 减少你的开发周期优化动态维护 XML 实体字段,无入侵全方位 ORM 辅助层让您拥有更多时间吃鸡、陪家人、陪朋友。更新日志升级 mybatis 到 3.5.0 版本升级 mybatis-spri…

详细介绍:JVM——从JIT到AOT:JVM编译器的云原生演进之路

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

deep-agents

deep-agents https://docs.langchain.com/labs/deep-agents/overviewhttps://www.bilibili.com/video/BV1ZFYozsEat?spm_id_from=333.788.videopod.sections&vd_source=57e261300f39bf692de396b55bf8c41b https:/…

在A列连续且相等行的最后插入空行,并求和

Sub 第一步插入空行() Set ws = ActiveSheetlastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).RowFor i = lastRow To 3 Step -1If ws.Cells(i, 1).Value <> ws.Cells(i - 1, 1).Value Thenws.Ro…

10.6集训改错

P10312 [SHUPC 2024] 栅栏密码 可以暴力模拟,由于不管怎么变化,在密文中的位置都是不变的所以得到长度之后可以预处理密文在图中的位置,反推得到明文

@Prometheus 监控-MySQL (Mysqld Exporter) - 教程

@Prometheus 监控-MySQL (Mysqld Exporter) - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

月熊志网站wordpress当下载站

1-线性回归&#xff08;Linear Regression&#xff09; 场景&#xff1a;预测商品销售额 优点&#xff1a;简单易用&#xff0c;结果易于解释缺点&#xff1a;假设线性关系&#xff0c;容易受到异常值影响概念&#xff1a;建立自变量和因变量之间线性关系的模型。公式&#x…

详细介绍:基于开源AI大模型与AI智能名片的S2B2C商城小程序源码优化:企业成本管理与获客留存的新范式

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …