2024-06-25 02:39:46 +08:00
|
|
|
pnpm 备忘清单
|
|
|
|
===
|
|
|
|
|
|
|
|
这是一份 [`pnpm`](https://pnpm.io/) 软件包管理器备忘单,其中列出了 `pnpm` 常用命令使用清单。
|
|
|
|
|
|
|
|
入门
|
|
|
|
---
|
|
|
|
|
|
|
|
### pnpm 与 npm 命令比较
|
2024-06-25 03:29:36 +08:00
|
|
|
<!--rehype:wrap-class=col-span-2 row-span-2-->
|
2024-06-25 02:39:46 +08:00
|
|
|
|
|
|
|
npm | pnpm | 说明
|
|
|
|
:- | :- | :-
|
|
|
|
`npm install` | `pnpm install` | 安装依赖
|
|
|
|
`npm init` | `pnpm init` | 创建 `package.json` 文件
|
|
|
|
`npm install <package>` | `pnpm add <package>` | 安装包
|
|
|
|
`npm install -g <package>` | `pnpm add -g <package>` | 全局安装包
|
|
|
|
`npm update` | `pnpm update` | 更新包
|
|
|
|
`npm cache clean` | `pnpm cache clean` | 清理缓存
|
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
参考 [npm](./npm.md) 备忘清单
|
|
|
|
|
|
|
|
### pnpm list
|
2024-06-25 02:39:46 +08:00
|
|
|
|
|
|
|
```shell
|
2024-06-25 03:29:36 +08:00
|
|
|
# 列出所有已安装的包
|
|
|
|
pnpm list
|
|
|
|
# 列出全局安装的包
|
|
|
|
pnpm list -g
|
|
|
|
# 查找过时的包
|
|
|
|
pnpm outdated
|
2024-06-25 02:39:46 +08:00
|
|
|
```
|
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
### pnpm why
|
2024-06-25 02:39:46 +08:00
|
|
|
|
|
|
|
```shell
|
2024-06-25 03:29:36 +08:00
|
|
|
# 显示为什么安装了某个包
|
|
|
|
pnpm why <package>
|
2024-06-25 02:39:46 +08:00
|
|
|
```
|
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
### pnpm install
|
|
|
|
<!--rehype:wrap-class=row-span-3-->
|
|
|
|
|
|
|
|
pnpm | 说明
|
|
|
|
:- | :-
|
|
|
|
`--no-lockfile` | 不生成 pnpm-lock.yaml 锁定文件
|
|
|
|
`--force` | 强制覆盖现有的 node_modules
|
|
|
|
`--frozen-lockfile` | 忽略 pnpm-lock.yaml 中的更改
|
|
|
|
`--offline` | 离线模式,不尝试从远程仓库安装包
|
|
|
|
`--shamefully-hoist` | 类似于 npm 的 hoist 行为
|
|
|
|
`--strict-peer-dependencies` | 严格检查 peer dependencies
|
|
|
|
<!--rehype:className=style-list-arrow-->
|
2024-06-25 02:39:46 +08:00
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
这些选项可用于 `pnpm install`。
|
2024-06-25 02:39:46 +08:00
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
### pnpm add
|
|
|
|
<!--rehype:wrap-class=row-span-3-->
|
|
|
|
|
|
|
|
pnpm | 说明
|
|
|
|
:- | :-
|
|
|
|
`--save` | 将包添加到 dependencies
|
|
|
|
`--save-dev` | 将包添加到 devDependencies
|
|
|
|
`--global` | 全局安装包
|
|
|
|
`--exact` | 安装精确版本号的包
|
|
|
|
`--shamefully-hoist` | 类似于 npm 的 hoist 行为
|
|
|
|
`--strict-peer-dependencies` | 严格检查 peer dependencies
|
|
|
|
<!--rehype:className=style-list-arrow-->
|
|
|
|
|
|
|
|
这些选项可用于 `pnpm add`。
|
2024-06-25 02:39:46 +08:00
|
|
|
|
|
|
|
### pnpm update
|
|
|
|
|
|
|
|
```shell
|
|
|
|
# 更新所有包
|
|
|
|
pnpm update
|
|
|
|
# 更新特定包
|
|
|
|
pnpm update <package>
|
|
|
|
# 更新到最新版本(包括 major 版本)
|
|
|
|
pnpm update --latest
|
|
|
|
```
|
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
### pnpm remove
|
2024-06-25 02:39:46 +08:00
|
|
|
|
|
|
|
```shell
|
2024-06-25 03:29:36 +08:00
|
|
|
# 从依赖中删除包
|
|
|
|
pnpm remove <package>
|
|
|
|
# 删除全局依赖包
|
|
|
|
pnpm remove -g create-react-app
|
|
|
|
# 删除特定版本的依赖包
|
|
|
|
pnpm remove lodash@4.17.21
|
2024-06-25 02:39:46 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
### pnpm cache
|
|
|
|
|
|
|
|
```shell
|
|
|
|
# 清理 pnpm 缓存
|
|
|
|
pnpm cache clean
|
|
|
|
# 查看缓存中所有的包
|
|
|
|
pnpm cache list
|
|
|
|
```
|
|
|
|
|
|
|
|
示例
|
|
|
|
---
|
|
|
|
|
|
|
|
### 安装包
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 将包添加到“dependencies”
|
|
|
|
pnpm add <package>
|
|
|
|
# 将包添加到“devDependencies”
|
|
|
|
pnpm add -D <package>
|
|
|
|
# 将包作为精确版本添加
|
|
|
|
pnpm add --exact <package>
|
|
|
|
# 在全局范围内安装包
|
|
|
|
pnpm add -g <package>
|
|
|
|
# 安装特定版本的包
|
|
|
|
pnpm add <package>@<version>
|
|
|
|
```
|
|
|
|
|
|
|
|
### 移除包
|
|
|
|
|
|
|
|
```bash
|
|
|
|
pnpm remove <package>
|
2024-06-25 03:29:36 +08:00
|
|
|
# 删除多个依赖包
|
|
|
|
pnpm remove lodash express
|
|
|
|
# 删除全局依赖包
|
|
|
|
pnpm remove -g create-react-app
|
|
|
|
# 删除特定版本的依赖包
|
|
|
|
pnpm remove lodash@4.17.21
|
2024-06-25 02:39:46 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
### 查看包
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 列出已安装的包
|
|
|
|
pnpm list
|
|
|
|
# 列出顶级安装的包
|
|
|
|
pnpm list --depth 0
|
|
|
|
# 列出全局安装的包
|
|
|
|
pnpm list -g
|
|
|
|
# 根据模式和深度列出包
|
|
|
|
pnpm list --pattern "lodash" --depth 1
|
|
|
|
```
|
|
|
|
|
|
|
|
### 清除
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 清理 node_modules 并删除不必要的文件
|
|
|
|
pnpm prune
|
|
|
|
# 检查过时的包
|
|
|
|
pnpm outdated
|
|
|
|
```
|
|
|
|
|
|
|
|
### 信息
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 显示关于安装包的原因的信息
|
|
|
|
pnpm why <package>
|
|
|
|
```
|
|
|
|
|
|
|
|
### 清理缓存
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 清除 pnpm 的全局缓存
|
|
|
|
pnpm cache clean
|
|
|
|
```
|
|
|
|
|
|
|
|
此外,您可以指定一个或多个要清理的包。
|
|
|
|
|
|
|
|
Monorepo
|
|
|
|
---
|
|
|
|
|
|
|
|
### 创建 Monorepo 工作区
|
2024-06-25 03:29:36 +08:00
|
|
|
<!--rehype:wrap-class=row-span-3-->
|
2024-06-25 02:39:46 +08:00
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
- 创建一个新的 pnpm 工作区:
|
2024-06-25 02:39:46 +08:00
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
```bash
|
|
|
|
pnpm init -w
|
|
|
|
```
|
|
|
|
|
|
|
|
- 将在项目的根目录中创建一个 `pnpm-workspace.yaml` 文件,内容如下:
|
2024-06-25 02:39:46 +08:00
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
```yaml
|
|
|
|
packages:
|
|
|
|
- 'packages/**'
|
|
|
|
- 'apps/**'
|
|
|
|
```
|
2024-06-25 02:39:46 +08:00
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
- 在 `pnpm-workspace.yaml` 中定义您的工作区结构:
|
2024-06-25 02:39:46 +08:00
|
|
|
|
2024-06-25 03:29:36 +08:00
|
|
|
```yaml
|
|
|
|
packages:
|
|
|
|
- 'packages/*'
|
|
|
|
- 'apps/*'
|
|
|
|
```
|
|
|
|
<!--rehype:className=style-timeline-->
|
2024-06-25 02:39:46 +08:00
|
|
|
|
|
|
|
### 添加包到 Monorepo 工作区
|
|
|
|
|
|
|
|
```bash
|
2024-06-25 03:29:36 +08:00
|
|
|
pnpm add <package> -w # 在工作区中添加包
|
2024-06-25 02:39:46 +08:00
|
|
|
```
|
|
|
|
|
|
|
|
### 运行脚本
|
2024-06-25 03:29:36 +08:00
|
|
|
<!--rehype:wrap-class=row-span-2-->
|
2024-06-25 02:39:46 +08:00
|
|
|
|
|
|
|
```bash
|
|
|
|
# 在所有包中运行脚本
|
|
|
|
pnpm -r run <script>
|
|
|
|
# 仅在某个包中运行脚本
|
|
|
|
pnpm --filter <package> run <script>
|
|
|
|
# 在某个包及其依赖中运行脚本
|
|
|
|
pnpm --filter <package>... run <script>
|
|
|
|
```
|
|
|
|
|
|
|
|
### 添加工作区范围的依赖
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 添加依赖到工作区根目录
|
|
|
|
pnpm add <package> -w
|
|
|
|
# 添加开发依赖到工作区根目录
|
|
|
|
pnpm add -D <package> -w
|
|
|
|
```
|
|
|
|
|
|
|
|
### 创建新的包
|
|
|
|
|
|
|
|
在 `packages` 目录中创建新的包,例如:
|
|
|
|
|
|
|
|
```bash
|
|
|
|
mkdir packages/new-package
|
|
|
|
cd packages/new-package
|
|
|
|
pnpm init
|
|
|
|
```
|
|
|
|
|
|
|
|
### 链接本地包
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 将本地包链接到当前工作区
|
|
|
|
pnpm link <local-package-path>
|
|
|
|
# 链接工作区中的包
|
|
|
|
pnpm add <local-package-name> --workspace
|
|
|
|
```
|
|
|
|
|
|
|
|
高级用法
|
|
|
|
---
|
|
|
|
|
|
|
|
### 工作区
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 创建工作区
|
|
|
|
pnpm init -w
|
|
|
|
# 在工作区中添加包
|
|
|
|
pnpm add <package> -w
|
|
|
|
```
|
|
|
|
|
|
|
|
### 链接
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 链接一个全局包到当前项目
|
|
|
|
pnpm link <package>
|
|
|
|
# 链接本地包到全局
|
|
|
|
pnpm link --global <package>
|
|
|
|
```
|
|
|
|
|
|
|
|
### 运行脚本
|
|
|
|
|
|
|
|
```bash
|
|
|
|
# 运行 package.json 中的脚本
|
|
|
|
pnpm run <script>
|
|
|
|
# 运行根目录中的包的脚本
|
|
|
|
pnpm run -w <script>
|
|
|
|
```
|
|
|
|
|
|
|
|
另见
|
|
|
|
---
|
|
|
|
|
|
|
|
- [pnpm 官方文档网站](https://pnpm.io/)
|
|
|
|
- [pnpm 常见问题解答](https://pnpm.io/motivation)
|