用途
link-workspace-packages 用于在 monorepo 中为包与包之间添加依赖关系。所有包管理器都支持 workspaces,但语法各不相同,该技能的作用就是按当前仓库使用的包管理器,给出正确的链接命令。
检测包管理器
先检查根级 package.json 中是否存在 packageManager 字段。
也可以检查仓库根目录的锁文件:
- pnpm-lock.yaml → pnpm
- yarn.lock → yarn
- bun.lock / bun.lockb → bun
- package-lock.json → npm
工作流程
- 识别消费方包(即发起导入的包)
- 识别提供方包(即被导入的包)
- 使用对应包管理器的 workspace 语法添加依赖
- 验证消费方的 node_modules/ 中是否创建了符号链接
各包管理器的用法
pnpm
使用 workspace: 协议——只有显式声明时才会创建符号链接。
# 在消费方目录中执行
pnpm add @org/ui --workspace
# 或在任意位置使用 --filter
pnpm add @org/ui --filter @org/app --workspace
package.json 中的结果:
{ "dependencies": { "@org/ui": "workspace:*" } }
yarn(v2+/berry)
同样使用 workspace: 协议。
yarn workspace @org/app add @org/ui
package.json 中的结果:
{ "dependencies": { "@org/ui": "workspace:^" } }
npm
没有 workspace: 协议。npm 会自动为工作区包创建符号链接。
npm install @org/ui --workspace @org/app
package.json 中的结果:
{ "dependencies": { "@org/ui": "*" } }
npm 在安装时会自动解析到本地工作区。
bun
支持 workspace: 协议(与 pnpm 兼容)。
cd packages/app && bun add @org/ui
package.json 中的结果:
{ "dependencies": { "@org/ui": "workspace:*" } }
示例
示例 1:pnpm——把 ui 库链接到 app
pnpm add @org/ui --filter @org/app --workspace
示例 2:npm——链接多个包
npm install @org/data-access @org/ui --workspace @org/dashboard
示例 3:排查“Cannot find module”
- 检查消费方的 package.json 中是否声明了该依赖
- 如果没有,用上面相应的命令添加
- 运行安装(pnpm install、npm install 等)
注意事项
- 符号链接出现在 <consumer>/node_modules/@org/<package>
- 提升(hoisting)行为因包管理器而异:
- npm/bun:把共享依赖提升到根 node_modules
- pnpm:不做提升(严格隔离,防止幽灵依赖)
- yarn berry:默认使用 Plug'n'Play(没有 node_modules)
- 根 package.json 应设置 "private": true,以防意外发布
适用场景
- 刚创建或生成新包,需要接通其依赖
- 在 monorepo 中为包之间建立引用关系
- 排查模块解析失败(如“Cannot find module”)问题
限制
资料未提供该技能对特定 Nx 版本、Node 版本或操作系统的最低要求,也未提供除上述四种包管理器之外的支持情况。