npm 问题与修复
npm 与 pnpm 对比 关键差异: 1. 性能:pnpm 相比 npm 通过硬链接和符号链接优化了包管理,它更高效地处理依赖和缓存,减少了磁盘空间的使用。 2. 锁文件:pnpm 使用 pnpm-…
npm 与 pnpm 对比
| 功能 | **pnpm**** 命令** |
**npm**** 命令** |
备注 |
|---|---|---|---|
| 安装依赖 | pnpm install |
npm install |
两者都可以根据 package.json安装项目依赖,但 pnpm install会利用 pnpm-lock.yaml优化安装,速度较快。 |
**安装依赖并保存到 ****package.json** |
pnpm add <package> |
npm install <package> |
pnpm add会将包添加到 dependencies, npm install也会添加,但 pnpm使用的安装方式更高效。 |
| 安装开发依赖 | pnpm add <package> -D |
npm install <package> -D |
pnpm add和 npm install都可以安装开发依赖,但 pnpm使用的包管理方式在性能上更优。 |
| 卸载依赖 | pnpm remove <package> |
npm uninstall <package> |
两者命令功能相同,都会从 node_modules中卸载指定的包,并更新 package.json。 |
| 查看已安装的包 | pnpm list |
npm list |
两者都用于查看已安装的依赖,pnpm list会更高效地显示包信息。 |
| 全局安装包 | pnpm add -g <package> |
npm install -g <package> |
pnpm和 npm都支持全局安装包。 |
| 更新依赖 | pnpm update |
npm update |
pnpm update会根据 pnpm-lock.yaml文件更新依赖, npm update则根据 package.json来更新依赖。 |
| 初始化项目 | pnpm init |
npm init |
pnpm init和 npm init用于初始化新的 package.json文件,功能相同。 |
| 安装指定版本的包 | pnpm add <package>@<version> |
npm install <package>@<version> |
两者都支持安装指定版本的包。 |
查看 **package.json**配置的脚本 |
pnpm run <script> |
npm run <script> |
两者都可以用来运行 package.json中定义的脚本命令,如启动服务器等。 |
| 创建锁文件 | pnpm install(自动生成 pnpm-lock.yaml) |
npm install(自动生成 package-lock.json) |
pnpm使用 pnpm-lock.yaml, npm使用 package-lock.json,两者的锁文件格式不同。 |
| 清理缓存 | pnpm store prune |
npm cache clean --force |
pnpm使用 pnpm store prune来清理缓存,而 npm使用 npm cache clean。 |
| 查看全局安装的包 | pnpm list -g |
npm list -g |
两者都可以用来查看全局安装的包。 |
| 临时执行 | pnpm dlx |
npx |
临时下载,执行后不会把它加入项目依赖。 |
关键差异:
- 性能:
pnpm相比npm通过硬链接和符号链接优化了包管理,它更高效地处理依赖和缓存,减少了磁盘空间的使用。 - 锁文件:
pnpm使用pnpm-lock.yaml,而npm使用package-lock.json,这两个文件格式和工作方式不同。 - 工作原理:
pnpm会将依赖的所有包集中存储在一个地方,并通过硬链接链接到项目中,而npm会在每个项目中复制一份完整的依赖包。
总结来说,pnpm 与 npm 在命令上大致相同,但 pnpm 的设计更加高效,尤其在性能和磁盘空间利用方面,因此在大规模项目中,pnpm 经常被认为是更好的选择。