pnpm monorepo 联调:告别 --global 参数

前言

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

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

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

之前我们这样操作:

bash 复制代码
# 库中
pnpm link --global

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

现在直接:

bash 复制代码
# 库中
pnpm link

# 项目中
pnpm link <pkg>

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

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

取消链接还是用 pnpm unlink:

bash 复制代码
pnpm unlink <pkg>

实际使用体验

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

bash 复制代码
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

在项目中链接库

在项目中链接也更直接了:

bash 复制代码
cd ~/projects/my-project
pnpm link @easy-editor/core

# 输出示例
❯ pnpm link @easy-editor/core
 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 "D:\\Programming\\EasyEditor\\EasyDashboard\\node_modules" will be removed and reinstalled from scratch. Proceed? (Y/n) · true
Recreating D:\\Programming\\EasyEditor\\EasyDashboard\\node_modules
dependencies:
    + @easy-editor/core 0.0.0 <- C:\\Users\\user\\AppData\\Local\\pnpm\\global\\5\\node_modules\\@easy-editor\\core

自动生成的 workspace 配置

这是个新发现,链接完成后,pnpm 会自动在项目根目录生成 pnpm-workspace.yaml:

yaml 复制代码
overrides:
  '@easy-editor/core': link:C:/Users/user/AppData/Local/pnpm/global/5/node_modules/@easy-editor/core

这样就能清楚地看到当前项目链接了哪些包,比之前透明多了。

多库联调的改进

之前需要给每个库都加 --global,现在直接:

bash 复制代码
# 在各个库中
cd ~/packages/core && pnpm link
cd ~/packages/designer && pnpm link
cd ~/packages/utils && pnpm link

# 在项目中
cd ~/projects/my-project
pnpm link @myorg/core
pnpm link @myorg/designer
pnpm link @myorg/utils

对于 workspace:* 这种依赖,pnpm 还是会自动处理,和之前一样智能。

前后对比

pnpm 9.x pnpm 10.x
全局链接 pnpm link --global pnpm link
项目链接 pnpm link --global <pkg> pnpm link <pkg>
workspace 配置 手动管理 自动生成
操作复杂度 需要记住加 --global 更简单直接

总结

pnpm 10.x 的这个改动虽然看起来不大,但确实让联调操作更简单了。不用再记那个 --global 参数,直接 pnpm link 就完事。

加上自动生成的 workspace 配置文件,整个链接状态也更透明了。如果你还在用旧版本,建议升级试试,体验确实有提升。


参考资料

  1. pnpm link | pnpm 官方文档
  2. "pnpm link --global" in v10 behaves differently from v9, breaking global linking.
相关推荐
计算机魔术师1 分钟前
半年前说不缺钱,半年后150亿美元超募
前端
用户5708462574402 分钟前
自动化发布器里最贵的 Bug:返回成功,但什么都没发生
前端
诚小纯7 分钟前
qwen-deep-research 接入实录:两阶段调用、SSE 解析、报告结构与 35 处不可追溯的引用
人工智能·github
爱吃馒头不吃辣8 分钟前
加一道题,改一天代码:题库即数据的降维打击
前端·架构
用户9948438810709 分钟前
开源了一个把老 PHP 站点自动升级到 PHP 8.5 的工具(应对 PHP2Shell 漏洞)
github
aiks_yuan11 分钟前
Requestly规则使用技巧:前端联调、接口Mock与网络请求调试实战
前端
程序员老赵15 分钟前
Docker 部署 MaxKB:轻松搭建企业级智能体平台
前端·docker·agent
用户72737441388419 分钟前
用 sha256 校验 Windows 下载文件:从 EZA Modern LS 说起
github
踩蚂蚁29 分钟前
输入关键词到离线模型:从 Wake Word 到多关键词 KWS 的一条工程链路
前端