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

前言

在之前的文章《pnpm monorepo 联调方案》中,我详细介绍了如何使用 pnpm linkpnpm 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.
相关推荐
程序员码歌3 小时前
豆包Seedream4.0深度体验:p图美化与文生图创作
android·前端·后端
urhero3 小时前
工作事项管理小工具——HTML版
前端·html·实用工具·工作事项跟踪·任务跟踪小工具·本地小程序
二十雨辰3 小时前
eduAi-智能体创意平台
前端·vue.js
golang学习记3 小时前
从0死磕全栈之Next.js connection() 函数详解:强制动态渲染的正确姿势(附实战案例)
前端
郝学胜-神的一滴3 小时前
Three.js光照技术详解:为3D场景注入灵魂
开发语言·前端·javascript·3d·web3·webgl
m0dw3 小时前
vue懒加载
前端·javascript·vue.js·typescript
国家不保护废物4 小时前
手写 Vue Router,揭秘路由背后的魔法!🔮
前端·vue.js
菜鸟‍4 小时前
【前端学习】仿Deepseek官网AI聊天网站React
前端·学习·react.js
小光学长4 小时前
基于Vue的保护动物信息管理系统r7zl6b88 (程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
前端·数据库·vue.js