包管理器分析
包管理器
对于前端开发而言,包管理是其中非常重要的一环。
npm
npm作为node包管理器,是nodejs官方的包管理工具。尽管它解决的代码共享的问题,在那个年代是极为特殊的思想,但是它依旧有很多的问题存在。而其他几个包管理工具,或多或少都解决了这些问题。
安装慢、node_modules 过大、依赖库版本锁定不一致 等等的问题。
yarn
yarn的出现纯粹是为了解决npm的这些问题。
在那个 npm install 慢、依赖版本时常出错的年代,Yarn 就像是完成了一次大的技术升级,把整个包管理的流程都做了优化。
- yarn.lock 文件:引入了自己的锁文件(区别于 npm 的 package-lock.json),更早解决了依赖版本不一致的问题
- 更快的安装体验:Yarn 通过缓存机制和并行安装方式,大大提升了安装速度。装过一次的包,下次无需重新拉。
- 离线安装:这是一个非常实用的特性,即使断网,你也可以依赖缓存离线安装项目,适合对网络依赖敏感的开发场景。
- 原子化安装:安装失败会自动回滚,防止项目进入“半安装”状态。
pnpm
pnpm 的初衷是解决占用磁盘空间过大问题。
pnpm 通过一种“硬链接 + 内容寻址”的存储方式,将所有依赖包统一下载到全局缓存中(.pnpm-store),每个项目的 node_modules 并不真的“安装”包,而是使用软链接指向缓存中的真实文件,同一个包只会下载、存储一份,再多个项目共用。
这样就带来了巨多好处,比如:下载速度飞快,空间占用大幅度下降,并且还可以完美兼容现有生态(保留 node_modules)。
并且,针对 Monorepo 架构,pnpm 也提供了非常好的支持(应该可以说是支持最好的包管理器了)
cnpm
cnpm 是淘宝团队基于 npm 封装的包管理工具,cnpm 默认使用淘宝镜像,速度比 npm 快很多。但是在我看来,cnpm有许多的问题,我不建议大家使用。
常用命令
功能 | NPM 命令 | Yarn 命令 | PNPM 命令 |
---|---|---|---|
安装依赖 | npm install | yarn install | pnpm install |
安装特定包 | npm install | yarn add | pnpm add |
移除包 | npm uninstall | yarn remove | pnpm remove |
更新包 | npm update | yarn upgrade | pnpm update |
初始化项目 | npm init | yarn init | pnpm init |