什么是Pnpm ?
pnpm - 速度快、节省磁盘空间的软件包管理器
全局安装
npm install -g pnpm
或使用 yarn:
yarn global add pnpm
这将在全局范围内安装 pnpm。
在项目中初始化 pnpm:
pnpm init
这会在当前目录下生成 package.json 文件,类似于 npm init 或 yarn init。
安装项目依赖项:
pnpm install
这将安装项目的依赖项,类似于 npm install 或 yarn install。
全局安装依赖项:
pnpm install -g package-name
或使用 yarn:
yarn global add package-name
运行脚本:
pnpm run script-name
这将运行项目中的脚本,类似于 npm run script-name 或 yarn run script-name。
查看安装的包:
pnpm list
这将显示项目中安装的所有包。
卸载包:
pnpm uninstall package-name
Pnpm & yarn & npm 对比
1. 磁盘占用空间少
pnpm 使用硬链接和符号链接来共享依赖项,而不是像 npm 和 yarn 一样在每个项目中复制一份。这减少了磁盘空间的占用,因为相同的依赖项可以被多个项目共享。
2. 安装依赖速度快
由于采用硬链接和符号链接,pnpm 在安装依赖项时通常比 npm 和 yarn 更快,特别是在有多个项目共享相同依赖项时。
3. 确保依赖一致性
pnpm 在安装依赖项时采用原子操作的方式,确保安装操作是原子的,要么全部成功,要么全部失败。这有助于确保依赖项的一致性。
4. 单一存储
pnpm 有一个单一的全局存储目录,避免了 npm 的多版本全局安装带来的问题。
5. 支持多引擎 [npm,yarn,pnpm 可以互相切换]
pnpm 可以与 npm 和 yarn 共存,这使得迁移到 pnpm 不需要修改项目文件。
三者对比
Feature |
pnpm |
Yarn |
npm |
Workspace support |
✔️ |
✔️ |
✔️ |
Isolated node_modules |
✔️ - The default |
✔️ |
✔️ |
Hoisted node_modules |
✔️ |
✔️ |
✔️ - The default |
Autoinstalling peers |
✔️ |
❌ |
✔️ |
Plug'n'Play |
✔️ |
✔️ - The default |
❌ |
Zero-Installs |
❌ |
✔️ |
❌ |
Patching dependencies |
✔️ |
✔️ |
❌ |
Managing Node.js versions |
✔️ |
❌ |
❌ |
Has a lockfile |
✔️ - pnpm-lock.yaml |
✔️ - yarn.lock |
✔️ - package-lock.json |
Overrides support |
✔️ |
✔️ - Via resolutions |
✔️ |
Content-addressable storage |
✔️ |
❌ |
❌ |
Dynamic package execution |
✔️ - Via pnpm dlx |
✔️ - Via yarn dlx |
✔️ - Via npx |
Side-effects cache |
✔️ |
❌ |
❌ |
Listing licenses |
✔️ - Via pnpm licenses list |
✔️ - Via a plugin |
❌ |