link-workspace-packages
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseLink Workspace Packages
链接工作区包
Add dependencies between packages in a monorepo. All package managers support workspaces but with different syntax.
在 monorepo 中为包之间添加依赖。所有包管理器都支持工作区,但语法各不相同。
Detect Package Manager
检测包管理器
Check whether there's a field in the root-level .
packageManagerpackage.jsonAlternatively check lockfile in repo root:
- → pnpm
pnpm-lock.yaml - → yarn
yarn.lock - /
bun.lock→ bunbun.lockb - → npm
package-lock.json
检查根目录下的 中是否存在 字段。
package.jsonpackageManager或者检查仓库根目录的锁文件:
- → pnpm
pnpm-lock.yaml - → yarn
yarn.lock - /
bun.lock→ bunbun.lockb - → npm
package-lock.json
Workflow
操作流程
- Identify consumer package (the one importing)
- Identify provider package(s) (being imported)
- Add dependency using package manager's workspace syntax
- Verify symlinks created in consumer's
node_modules/
- 确定消费包(即导入其他包的包)
- 确定提供包(即被导入的包)
- 使用包管理器的工作区语法添加依赖
- 验证消费包的 中已创建符号链接
node_modules/
pnpm
pnpm
Uses protocol - symlinks only created when explicitly declared.
workspace:bash
undefined使用 协议——仅在显式声明时创建符号链接。
workspace:bash
undefinedFrom consumer directory
从消费包目录执行
pnpm add @org/ui --workspace
pnpm add @org/ui --workspace
Or with --filter from anywhere
或者在任意位置使用 --filter 参数
pnpm add @org/ui --filter @org/app --workspace
Result in `package.json`:
```json
{ "dependencies": { "@org/ui": "workspace:*" } }pnpm add @org/ui --filter @org/app --workspace
`package.json` 中的结果:
```json
{ "dependencies": { "@org/ui": "workspace:*" } }yarn (v2+/berry)
yarn (v2+/berry)
Also uses protocol.
workspace:bash
yarn workspace @org/app add @org/uiResult in :
package.jsonjson
{ "dependencies": { "@org/ui": "workspace:^" } }同样使用 协议。
workspace:bash
yarn workspace @org/app add @org/uipackage.jsonjson
{ "dependencies": { "@org/ui": "workspace:^" } }npm
npm
No protocol. npm auto-symlinks workspace packages.
workspace:bash
npm install @org/ui --workspace @org/appResult in :
package.jsonjson
{ "dependencies": { "@org/ui": "*" } }npm resolves to local workspace automatically during install.
无 协议。npm 会自动为工作区包创建符号链接。
workspace:bash
npm install @org/ui --workspace @org/apppackage.jsonjson
{ "dependencies": { "@org/ui": "*" } }npm 会在安装过程中自动解析为本地工作区包。
bun
bun
Supports protocol (pnpm-compatible).
workspace:bash
cd packages/app && bun add @org/uiResult in :
package.jsonjson
{ "dependencies": { "@org/ui": "workspace:*" } }支持 协议(与 pnpm 兼容)。
workspace:bash
cd packages/app && bun add @org/uipackage.jsonjson
{ "dependencies": { "@org/ui": "workspace:*" } }Examples
示例
Example 1: pnpm - link ui lib to app
bash
pnpm add @org/ui --filter @org/app --workspaceExample 2: npm - link multiple packages
bash
npm install @org/data-access @org/ui --workspace @org/dashboardExample 3: Debug "Cannot find module"
- Check if dependency is declared in consumer's
package.json - If not, add it using appropriate command above
- Run install (,
pnpm install, etc.)npm install
示例1:pnpm - 将UI库链接到应用
bash
pnpm add @org/ui --filter @org/app --workspace示例2:npm - 链接多个包
bash
npm install @org/data-access @org/ui --workspace @org/dashboard示例3:调试“Cannot find module”错误
- 检查消费包的 中是否已声明该依赖
package.json - 如果没有,使用上述对应的命令添加
- 执行安装命令(、
pnpm install等)npm install
Notes
注意事项
- Symlinks appear in
<consumer>/node_modules/@org/<package> - Hoisting differs by manager:
- npm/bun: hoist shared deps to root
node_modules - pnpm: no hoisting (strict isolation, prevents phantom deps)
- yarn berry: uses Plug'n'Play by default (no )
node_modules
- npm/bun: hoist shared deps to root
- Root should have
package.jsonto prevent accidental publish"private": true
- 符号链接会出现在 目录下
<consumer>/node_modules/@org/<package> - 不同管理器的依赖提升机制不同:
- npm/bun:将共享依赖提升到根目录的
node_modules - pnpm:不进行依赖提升(严格隔离,避免幽灵依赖)
- yarn berry:默认使用 Plug'n'Play 机制(无 目录)
node_modules
- npm/bun:将共享依赖提升到根目录的
- 根目录的 应设置
package.json,以防止意外发布"private": true