mcpField
L
link-workspace-packages

link-workspace-packages

github.com/nrwl开发293.1k 次安装今天更新
代码仓库

关于 link-workspace-packages

介绍如何在 monorepo 中为包添加依赖。技能帮助识别包管理器,并提供 pnpm、yarn、npm 和 bun 对应的 workspace 命令。

主要功能

  1. 01识别包管理器
  2. 02添加 workspace 依赖
  3. 03使用各管理器对应命令
  4. 04验证包符号链接
  5. 05排查模块缺失问题

适用场景

  1. 01将 UI 包链接到应用
  2. 02添加多个本地依赖
  3. 03解决模块无法找到的错误

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/nrwl/nx-ai-agents-config --skill link-workspace-packages

安装后在 Claude Code 中输入/link-workspace-packages确认已加载。

详细介绍

链接工作区包

在单体仓库中的包之间添加依赖。所有包管理器都支持工作区,但语法各不相同。

检测包管理器

检查根目录下的 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: 协议——只有显式声明后才会创建符号链接。

# From consumer directory
pnpm add @org/ui --workspace

# Or with --filter from anywhere
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 lib 链接到 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> 中
  • 不同管理器的提升行为各异:
    • npm/bun:将共享依赖提升到根目录的 node_modules
    • pnpm:不进行提升(严格隔离,防止幽灵依赖)
    • yarn berry:默认使用 Plug'n'Play(没有 node_modules)
  • 根目录的 package.json 应包含 "private": true,以防意外发布

评论

支持 Markdown