pnpm(Performant NPM)是一种用于Node.js项目的软件包管理器。它旨在成为npm(Node Package Manager)和yarn的替代品,提供更快速的依赖安装、更高的磁盘空间使用效率以及更强的一致性和可靠性。
pnpm的一些主要特点包括:
安装 pnpm
是一个非常简单的过程,以下是几种常见的安装方法:
如果你已经安装了 Node.js 和 npm,可以通过以下命令安装 pnpm
:
bashnpm install -g pnpm
这会全局安装 pnpm
,之后你可以在任何地方使用它。
从 Node.js 16.10 开始,Corepack
已经内置在 Node.js 中。你可以通过以下步骤启用并安装 pnpm
:
启用 Corepack:
bashcorepack enable
安装最新版本的 pnpm
:
bashcorepack prepare pnpm@latest --activate
检查是否安装成功:
bashpnpm --version
注意:如果你使用的是较旧版本的 Node.js(低于 16.10),你需要手动安装 Corepack:
bashnpm install -g corepack
如果你使用 macOS 或 Linux,并且安装了 Homebrew,可以通过以下命令安装 pnpm
:
bashbrew install pnpm
你可以直接运行官方提供的安装脚本来安装 pnpm
:
bashcurl -fsSL https://get.pnpm.io/install.sh | sh -
安装完成后,重新加载你的 shell 配置文件(如 .bashrc
或 .zshrc
)以确保 pnpm
命令可用。
如果你使用 Docker,可以直接拉取带有 pnpm
的镜像:
bashdocker run -it --rm node:alpine sh -c "npm install -g pnpm && pnpm --version"
无论使用哪种方法安装,都可以通过以下命令验证 pnpm
是否安装成功:
bashpnpm --version
如果输出了版本号(例如 8.x.x
),说明安装成功!
如果你想升级到最新版本的 pnpm
,可以运行以下命令:
bashpnpm add -g pnpm
或者使用 npm
升级:
bashnpm install -g pnpm@latest
pnpm
是一个功能强大的包管理工具,其使用方式与 npm
和 yarn
类似,但有一些独特之处。以下是 pnpm
的常见用法和命令:
如果你想初始化一个新的 Node.js 项目,可以运行以下命令:
bashpnpm init
这会引导你创建一个 package.json
文件。
在项目根目录下(包含 package.json
),运行以下命令安装所有依赖:
bashpnpm install
或者简写为:
bashpnpm i
安装一个新的包并将其添加到 dependencies
中:
bashpnpm add <package-name>
例如:
bashpnpm add lodash
将包添加到 devDependencies
中:
bashpnpm add -D <package-name>
例如:
bashpnpm add -D typescript
全局安装包(类似于 npm install -g
):
bashpnpm add -g <package-name>
例如:
bashpnpm add -g create-react-app
更新所有依赖到最新版本:
bashpnpm update
更新某个特定的依赖:
bashpnpm update <package-name>
从 dependencies
或 devDependencies
中移除某个包:
bashpnpm remove <package-name>
例如:
bashpnpm remove lodash
pnpm
支持 package.json
中定义的脚本命令。你可以通过以下方式运行脚本:
bashpnpm run <script-name>
例如,如果你的 package.json
中有以下脚本:
json"scripts": {
"start": "node index.js",
"build": "webpack"
}
那么可以通过以下方式运行:
bashpnpm run start pnpm run build
注意:对于常见的脚本(如 start
、test
等),可以直接省略 run
:
bashpnpm start
pnpm test
pnpm
使用了一个全局存储来保存包,有时你可能需要清理缓存:
bashpnpm store prune
这会删除未被任何项目使用的包。
pnpm
对 Monorepo(多包仓库)有很好的支持,通过 workspaces
配置可以轻松管理多个子项目。
在根目录的 package.json
中添加 workspaces
字段:
json{
"name": "my-monorepo",
"private": true,
"workspaces": [
"packages/*"
]
}
在根目录运行以下命令,安装所有子项目的依赖:
bashpnpm install
可以在某个子项目中运行命令,也可以在整个工作区中运行命令:
在某个子项目中运行:
bashpnpm --filter <workspace-name> <command>
在整个工作区中运行:
bashpnpm -r <command>
例如,在所有工作区中运行 build
脚本:
bashpnpm -r run build
查看项目的依赖关系树:
bashpnpm list
或者查看全局安装的包:
bashpnpm list -g
升级 pnpm
到最新版本:
bashpnpm add -g pnpm@latest
--save-prod
:将包添加到 dependencies
(默认行为)。--save-dev
或 -D
:将包添加到 devDependencies
。--global
或 -g
:全局安装包。--filter
:在 Monorepo 中过滤特定的工作区。--recursive
或 -r
:在 Monorepo 中递归执行命令。功能 | npm | yarn | pnpm |
---|---|---|---|
安装速度 | 慢 | 快 | 更快 |
磁盘空间利用率 | 高 | 中等 | 非常高效 |
依赖隔离性 | 弱 | 强 | 强 |
Monorepo 支持 | 较弱 | 强 | 强 |