前言

在之前的文章《pnpm monorepo 联调方案》中,我详细介绍了如何使用 pnpm linkpnpm link --global 来解决 monorepo 环境下的调试难题。

时间过去了一段时间,pnpm 也在不断演进。最近在使用过程中,我发现了一个有趣的变化:执行 pnpm link 时不再需要添加 --global 参数,同时 pnpm 会自动创建 pnpm-workspace.yaml 文件。这引起了我的好奇心,决定深入研究一下 pnpm 10.x 版本中 link 功能的最新变化。

pnpm 10.x 中关于 link 的变更

最大的变化就是 去除了 --global 参数

之前我们这样操作:

# 库中
pnpm link --global

# 项目中
pnpm link --global <pkg>

现在直接:

# 库中
pnpm link

# 项目中
pnpm link <pkg>

看起来是小改动,但其实是把之前的 pnpm link --global 的行为直接变成了 pnpm link 的默认行为。

从官方文档也能看出来,现在的 pnpm link 描述和之前 9.x 版本的 pnpm link --global 完全一样。

image.png

image.png

取消链接还是用 pnpm unlink

pnpm unlink <pkg>

实际使用体验

在库中执行 link

现在在基础库中执行 pnpm link,会直接链接到全局:

cd ~/packages/core
pnpm install
pnpm link

# 输出示例
❯ pnpm link
 WARN  The package @easy-editor/core, which you have just pnpm linked, has the following peerDependencies specified in its package.json:
  - mobx@^6.13.5
The linked in dependency will not resolve the peer dependencies from the target node_modules.
This might cause issues in your project. To resolve this, you may use the "file:" protocol to reference the local dependency.
√ The modules directory at "C:\\\\Users\\\\user\\\\AppData\\\\Local\\\\pnpm\\\\global\\\\5\\\\node_modules" will be removed and reinstalled from scratch. Proceed? (Y/n) · true
Recreating C:\\\\Users\\\\user\\\\AppData\\\\Local\\\\pnpm\\\\global\\\\5\\\\node_modules