NPM vs. PNPM
2024年8月6日VuepressMarkdownNPMPNPM
NPM (Node Package Manager) vs. PNPM (Package Node Module)
NPM 是 Node.js 的默认包管理器。它用于安装、管理和发布 Node.js 包。NPM 在 Node.js 社区中被广泛使用,并且是许多项目的默认选择。
PNPM 是一个性能优化的包管理器,旨在提供更快的安装速度和更小的磁盘占用空间。PNPM 使用链接树(link tree)来减少重复文件的数量,从而节省磁盘空间。
主要区别:
- 磁盘空间: PNPM 通过链接共享依赖项,减少了磁盘上的冗余文件。
- 安装速度: PNPM 通常比 NPM 快,因为它并行化了安装过程。
- 内存使用: PNPM 在安装大型项目时通常使用较少的内存。
- 全局安装: NPM 可以全局安装包,而 PNPM 不推荐这样做。
- 缓存: PNPM 使用本地缓存,这有助于加速安装过程。
- 版本兼容性: PNPM 支持所有 NPM 支持的功能,并保持向后兼容性。
安装方式
安装 NPM
实际上,安装 Node.js 时,NPM 已经作为 Node.js 的一部分被安装了。可以通过以下命令检查 NPM 是否已安装及版本信息:
npm -v
需要更新 NPM 到最新版本,可以使用下面的命令:
npm install -g npm
安装 PNPM
可以通过 NPM 来安装 PNPM:
npm install -g pnpm
或者使用 Yarn (如果已经安装了 Yarn):
yarn global add pnpm
安装完成后,可以在项目目录中使用 pnpm
命令来安装和管理依赖。
例如,在项目中初始化并安装依赖:
pnpm init # 初始化一个新的项目
pnpm add express # 安装 express 框架
安装pnpm
要检查 pnpm
是否已经安装在您的系统上,可以使用以下命令:
pnpm --version
或者简写为:
pnpm -v
如果 pnpm
已经正确安装,这个命令会输出 pnpm
的版本号。如果没有安装或者路径设置有问题,会看到类似于找不到命令的错误信息。
一般报错
C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:22534
throw new Error(
^
Error: Error when performing the request to https://registry.npmjs.org/pnpm/-/pnpm-9.6.0.tgz; for troubleshooting help, see https://github.com/nodejs/corepack#troubleshooting
at fetch (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:22534:11)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async fetchUrlStream (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:22564:20)
... 4 lines matching cause stack trace ...
at async Object.runMain (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:24007:5) {
[cause]: TypeError: fetch failed
at node:internal/deps/undici/undici:13178:13
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async fetch (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:22528:16)
at async fetchUrlStream (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:22564:20)
at async download (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:22688:18)
at async installVersion (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:22781:55)
at async Engine.ensurePackageManager (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:23224:32)
at async Engine.executePackageManagerRequest (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:23320:25)
at async Object.runMain (C:\Program Files\nodejs\node_modules\corepack\dist\lib\corepack.cjs:24007:5) {
[cause]: ConnectTimeoutError: Connect Timeout Error (attempted addresses: 104.16.0.35:443)
at onConnectTimeout (node:internal/deps/undici/undici:2331:28)
at node:internal/deps/undici/undici:2283:50
at Immediate._onImmediate (node:internal/deps/undici/undici:2313:37)
at process.processImmediate (node:internal/timers:483:21) {
code: 'UND_ERR_CONNECT_TIMEOUT'
}
}
}
Node.js v20.16.0
则是因为尝试从 NPM 仓库下载 pnpm-9.6.0.tgz
文件时发生了连接超时错误。这可能是由于网络问题导致的。
更改 NPM 镜像源:
- 所在的地区访问 NPM 仓库速度较慢,可以考虑使用国内镜像源。
- 对于
npm
,使用以下命令更改镜像源:npm config set registry https://registry.npmmirror.com
- 对于
yarn
,可以使用以下命令更改镜像源:yarn config set registry https://registry.npmmirror.com
然后就好了,再使用pnpm -v
检查安装即可
查询当前使用的镜像源
npm get registry
官方镜像源
npm config set registry https://registry.npmjs.org/
淘宝镜像源是目前国内使用较为广泛的镜像源之一。
npm config set registry https://registry.npmmirror.com/
腾讯云镜像源提供了另一个选择,同样可以提供快速的下载速度。
npm config set registry https://mirrors.cloud.tencent.com/npm/
cnpm是一个基于npm的中国镜像源,,它提供了npm包的完整镜像,并且更新速度较快
npm config set registry https://r.cnpmjs.org/