pnpm
相对于 npm
解决了两个方面的问题:
- 幻影依赖。依赖扁平化,导致项目能够直接引入可能没在
package.json
中声明的依赖。 - 分身依赖。扁平化但不完全,导致子依赖中会存在其他依赖的特定版本。如果这种情况在同一个项目中众多且重复,也有很大的性能损耗。
其实 pnpm
的 workspaces
结合 lerna
使用的优势也在于解决了以上两点。
1.使用单个workspace
使用 --filter
参数,可访问指定的单个 workspace
:
shell
pnpm <command> --filter <workspace>
譬如:
shell
pnpm add vue --filter a
2.使用workspaces
pnpm
貌似没有提供相关的访问整个 workspaces
的指令方式。
3.pnpm-workspace.yaml
不同于 npm
与 yarn
在 package.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