文章目录
一、pnpm 是什么
pnpm(Performant npm)和 npm(Node.js Package Manager)是两种不同的JavaScript包管理工具,它们在多个方面存在显著的差异。
以下是它们之间的主要区别:
二、pnpm 和 npm 的区别
1.包的存储方式
- npm:npm将每个包都下载到项目的node_modules目录中。这意味着,如果多个项目使用相同的包版本,它们会在各自的node_modules目录下存储独立的副本。
- pnpm:pnpm使用一个全局的存储库(store)来存储所有已下载的包,并在每个项目中创建符号链接(或硬链接)指向这些包。这种方式避免了在多个项目中重复存储相同的依赖项,从而节省了磁盘空间。
2.空间占用
- npm:由于每个项目都存储了独立的包副本,因此空间占用相对较大。
- pnpm:通过共享存储库和符号链接的方式,pnpm显著减少了空间占用。
3.安装速度
- npm:由于每个项目都需要下载并安装其所需的依赖项,安装速度可能会受到网络速度、包大小等因素的影响。
- pnpm:由于pnpm使用全局存储库并通过符号链接引用包,因此安装速度通常更快。特别是在处理大量依赖项或需要频繁安装依赖项的项目中,pnpm的优势更为明显。
4.依赖解析和node_modules结构
- npm:npm的依赖解析策略可能会导致依赖项被扁平化到顶层node_modules目录,这可能会引入版本冲突或意外的行为。
- pnpm:pnpm采用严格的依赖解析策略,并创建非扁平化的node_modules结构。这减少了意外覆盖依赖的风险,并避免了由于包之间的版本冲突所导致的问题。
5.命令行接口(CLI)
npm 和 pnpm 的命令行接口非常相似,大多数常用命令(如install、run、test等)都是一致的。然而,在某些高级功能和命令上,它们之间可能存在差异。
6.兼容性
- npm:作为最早和最广泛使用的包管理器,npm几乎被所有的Node.js项目所支持。
- pnpm:虽然pnpm在许多项目中能够无缝工作,但在某些依赖于特定node_modules结构的工具或项目中可能会遇到兼容性问题。
7.其他功能
pnpm 还提供了一些额外的功能,如作为Node.js版本管理器(类似于nvm等工具)、支持多平台(Windows、Linux、macOS)等。
8.总结
npm和pnpm在包的存储方式、空间占用、安装速度、依赖解析和node_modules结构、命令行接口以及兼容性等方面存在显著的差异。
选择哪一个工具主要取决于个人或团队的需求以及项目的特定要求。
对于需要节省磁盘空间、提高安装速度并减少依赖冲突的项目,pnpm可能是一个更好的选择。
然而,在兼容性方面,npm可能具有更广泛的支持。
三、如何安装和使用 pnpm
1.安装pnpm
如果你还没有安装nodejs
,请先看这篇,传送门:《Windows系统安装nodejs版本管理工具nvm(node version manager)实现nodejs版本自由切换详细教程踩坑实录》
效果:
D:\AI\AnythinLLM\frontend>npm install -g pnpm
added 1 package in 8s
npm notice
npm notice New major version of npm available! 10.7.0 -> 11.1.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v11.1.0
npm notice To update run: npm install -g npm@11.1.0
npm notice
2.验证安装
安装完成后,可以使用 pnpm -v
或 pnpm -version
,来验证 pnpm 是否安装成功:
D:\AI\AnythinLLM\frontend>pnpm -v
10.4.1
D:\AI\AnythinLLM\frontend>pnpm -version
10.4.1
若看到上面的版本号,则大功告成!
3.配置 npm(可选)
如果你需要配置 pnpm 的镜像源(例如使用国内镜像源加速),可以运行以下命令:
pnpm add -g pnpm@latest
pnpm config set registry http://registry.npmmirror.com
都看到这里了,各位帅哥/美女,不管有用没用,都帮忙点个赞呗,❤️谢谢~
-
Author
- 吴所畏惧 2025.02.20