Skip to content

pnpm 相对于 npm 解决了两个方面的问题:

  1. 幻影依赖。依赖扁平化,导致项目能够直接引入可能没在 package.json 中声明的依赖。
  2. 分身依赖。扁平化但不完全,导致子依赖中会存在其他依赖的特定版本。如果这种情况在同一个项目中众多且重复,也有很大的性能损耗。

其实 pnpmworkspaces 结合 lerna 使用的优势也在于解决了以上两点。

1.使用单个workspace

使用 --filter 参数,可访问指定的单个 workspace

shell
pnpm <command> --filter <workspace>

譬如:

shell
pnpm add vue --filter a

2.使用workspaces

pnpm 貌似没有提供相关的访问整个 workspaces 的指令方式。

3.pnpm-workspace.yaml

不同于 npmyarnpackage.json 中定义 workspaces

pnpm 需要单独创建 pnpm-workspace.yaml 文件。

首先在 pnpm-workspace.yaml 中定义 packages:

yaml
packages:
  - 'packages/*'

4..npmrc

.npmrc 中可写入以下配置(可选):

yaml
# 将本地包连接到node_modules
link-workspace-packages=true
# 优先使用工作目录的package,只有save-workspace-protocal=false时有效
prefer-workspace-packages=true
# 共享lock文件,有利于模块解析
shared-workspace-lockfile=true
# 用来控制依赖在package.json中的版本范围
save-workspace-protocol=true
# 递归执行是否作用在根工作区
include-workspace-root=false

5.参考文档