SuperAPI AI 工具集

link-workspace-packages

编程与开发

查看项目

更新于 10-16 06:00

技能介绍

用途

在 monorepo 中为各包之间添加依赖,把工作区内的包链接起来。所有包管理器都支持 workspaces,但语法不同,本技能负责识别并给出正确的命令。

识别包管理器

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

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

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

工作流程

  1. 确定消费者包(发起导入的一方)
  2. 确定提供者包(被导入的一方)
  3. 使用对应包管理器的工作区语法添加依赖
  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”问题

限制

本技能仅覆盖 npm、yarn、pnpm、bun 四种包管理器的工作区链接方式;其他包管理器或非工作区场景暂未提供。