pnpm 使用 - yeastgrow/blog GitHub Wiki
pnpm vs npm
pnpm
和 npm
都是 Node.js 的包管理工具,但它们在设计理念、性能和使用方式上有一些显著的不同。以下是它们的主要区别:
1. 安装机制
- npm: 使用的是嵌套的
node_modules
结构。每个项目都有自己的node_modules
目录,依赖包会被重复安装在不同的项目中,导致磁盘空间的浪费。 - pnpm: 使用的是平铺的
node_modules
结构。所有项目的依赖包都存储在一个全局存储(global store)中,项目中的node_modules
只是指向全局存储中的符号链接(symlink)。这样可以节省磁盘空间,并且安装速度更快。
2. 性能
- npm: 由于依赖包的重复安装,npm 的安装速度相对较慢,尤其是在多个项目中使用相同的依赖包时。
- pnpm: 由于使用了全局存储和符号链接,pnpm 的安装速度通常比 npm 快,尤其是在多个项目中使用相同的依赖包时。
3. 磁盘空间
- npm: 由于依赖包的重复安装,npm 会占用更多的磁盘空间。
- pnpm: 由于依赖包的共享,pnpm 占用的磁盘空间更少。
4. 依赖解析
- npm: 使用的是嵌套的
node_modules
结构,可能会导致依赖冲突和版本不一致的问题。 - pnpm: 使用的是平铺的
node_modules
结构,依赖解析更加清晰和一致,减少了依赖冲突的可能性。
5. 安全性
- npm: 由于依赖包的重复安装,npm 可能会导致安全漏洞的重复出现。
- pnpm: 由于依赖包的共享,pnpm 可以更容易地管理和更新依赖包,从而提高安全性。
6. 兼容性
- npm: 由于是 Node.js 的默认包管理工具,npm 具有广泛的兼容性和支持。
- pnpm: 虽然
pnpm
在设计上更加高效,但可能需要一些时间来适应其工作方式,尤其是在处理一些复杂的依赖关系时。
pnpm installation
安装 pnpm
非常简单,可以通过以下几种方式进行安装:
1. 使用 npm 安装
你可以使用 npm
来安装 pnpm
。虽然 pnpm
旨在替代 npm
,但你可以先使用 npm
来安装 pnpm
:
npm install -g pnpm
2. 使用安装脚本
pnpm
提供了一个安装脚本,可以直接从命令行运行:
curl -fsSL https://get.pnpm.io/install.sh | sh -
或者在 Windows 上使用 PowerShell:
iwr https://get.pnpm.io/install.ps1 -useb | iex
3. 使用 Homebrew(macOS/Linux)
如果你使用的是 macOS 或 Linux,并且已经安装了 Homebrew,你可以使用 Homebrew 来安装 pnpm
:
brew install pnpm
4. 验证安装
安装完成后,你可以通过以下命令来验证 pnpm
是否安装成功:
pnpm --version
如果安装成功,你应该会看到 pnpm
的版本号。
pnpm migration
将一个原本使用 npm
的项目迁移到 pnpm
是一个相对简单的过程。以下是详细的步骤:
pnpm
1. 安装 首先,确保你已经安装了 pnpm
。如果你还没有安装,可以参考前面的安装步骤。
node_modules
目录
2. 删除现有的 在迁移之前,你需要删除现有的 node_modules
目录,以便 pnpm
可以重新安装依赖。
rm -rf node_modules
在 Windows 上,你可以使用以下命令:
rmdir /s /q node_modules
3. 安装项目依赖
使用 pnpm
安装项目的依赖。你可以使用 pnpm install
命令来安装 package.json
中列出的所有依赖。
pnpm install
4. 更新脚本命令
如果你在 package.json
中定义了一些脚本命令(例如 start
、build
等),你可能需要更新这些命令以使用 pnpm
。例如,如果你之前使用的是 npm start
,现在应该使用 pnpm start
。
{
"scripts": {
"start": "pnpm start",
"build": "pnpm build"
}
}
5. 更新 CI/CD 配置
如果你在持续集成/持续部署(CI/CD)管道中使用 npm
,你需要更新配置文件以使用 pnpm
。例如,如果你使用的是 GitHub Actions,你可能需要更新 .github/workflows/ci.yml
文件。
- name: Install dependencies
run: pnpm install
- name: Build project
run: pnpm build
pnpm basic usage
pnpm
将其依赖包存储在一个全局存储(global store)中,而不是像 npm
那样在每个项目的 node_modules
目录中重复安装。这个全局存储的位置取决于你的操作系统和配置。
默认存储位置
1. Linux 和 macOS
在 Linux 和 macOS 上,pnpm
的默认全局存储位置通常是:
~/.pnpm-store/v3
2. Windows
在 Windows 上,pnpm
的默认全局存储位置通常是:
C:\Users\<YourUsername>\.pnpm-store\v3
自定义存储位置
你可以通过设置环境变量 PNPM_STORE_DIR
来指定自定义的存储位置。例如,如果你想将存储位置设置为 /custom/path/pnpm-store
,你可以在命令行中设置环境变量:
export PNPM_STORE_DIR=/custom/path/pnpm-store
或者在 Windows 上使用 PowerShell:
$env:PNPM_STORE_DIR = "C:\custom\path\pnpm-store"
查看当前存储位置
你可以使用 pnpm store path
命令来查看当前的存储位置:
pnpm store path
清理存储
如果你想要清理未使用的依赖包,可以使用 pnpm store prune
命令:
pnpm store prune
这个命令会删除存储中未被任何项目引用的依赖包,从而释放磁盘空间。
总结
pnpm
将其依赖包存储在一个全局存储中,默认位置取决于操作系统和用户配置。你可以通过设置环境变量 PNPM_STORE_DIR
来自定义存储位置,并使用 pnpm store path
命令查看当前的存储位置。