SuperAPI AI 工具集

link-workspace-packages

编程与开发

查看项目

更新于 10-15 18:41

技能介绍

用途

link-workspace-packages 用于在 monorepo 中为包与包之间添加依赖关系。所有包管理器都支持 workspaces,但语法各不相同,该技能的作用就是按当前仓库使用的包管理器,给出正确的链接命令。

检测包管理器

先检查根级 package.json 中是否存在 packageManager 字段。

也可以检查仓库根目录的锁文件:

  • pnpm-lock.yaml → pnpm
  • yarn.lock → yarn
  • bun.lock / bun.lockb → bun
  • package-lock.json → npm

工作流程

  1. 识别消费方包(即发起导入的包)
  2. 识别提供方包(即被导入的包)
  3. 使用对应包管理器的 workspace 语法添加依赖
  4. 验证消费方的 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”

  1. 检查消费方的 package.json 中是否声明了该依赖
  2. 如果没有,用上面相应的命令添加
  3. 运行安装(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 版本或操作系统的最低要求,也未提供除上述四种包管理器之外的支持情况。