技术百科首页 >Yarn >Yarn 的 workspaces 怎么管理 monorepo 里的多个包? Yarn 的 workspaces 怎么管理 monorepo 里的多个包?
1. 通过 glob 模式声明 workspace
- 在根目录的 package.json 中添加 workspaces 字段,列出各子包的相对路径(支持 glob 模式,如 "packages/*")
- 每个被匹配的目录只要包含自己的 package.json,就会成为一个独立的 workspace
- 即使项目只有一个包,根 workspace 也始终存在,作为默认 workspace
2. workspace 间的依赖与共享
- 内部包之间可通过特殊的 workspace: 协议相互引用(如 "@my-org/utils": "workspace:^"),该协议在发布时会被透明替换为实际版本号
- 还可通过 catalog: 协议在多个 workspace 间共享依赖范围
- Yarn 会把共享依赖提升到根目录,每个版本只安装一次,从而节省磁盘空间并加快安装
3. 配套的 monorepo 工具链
- yarn workspaces foreach 可跨多个 workspace 并行运行同名脚本,-A 选中全部、-p 并行、-t 按拓扑顺序(依赖优先)执行
- yarn workspaces focus 可聚焦安装指定 workspace 及其传递依赖所需的包,跳过其他无关内容
- 约束引擎、workspace profiles 等能力可与 workspaces 配合,进一步保证 monorepo 内各包遵循一致的规范