如何在Turborepo B中使用Turborepo A内部包?常规规范咨询
在Turborepo B中使用Turborepo A内部包的最佳实践
常见的关联方式
子工作区嵌套(放在A的
apps/目录下)
这是最直接的做法,适合Turborepo B是A生态下的子项目或应用的场景。此时Turborepo A的根目录会统一管理所有工作区,包括自身的packages和B的内部模块,B不需要额外配置跨目录依赖,直接引用A的内部包即可,Turborepo会自动处理依赖链路和缓存。跨独立仓库的包链接
如果Turborepo B是独立仓库,不想嵌套在A里,可以用包管理器的链接功能:- 在Turborepo A的目标内部包目录下执行
npm link(对应yarn/pnpm的话用yarn link/pnpm link) - 切换到Turborepo B的项目中,执行
npm link <你的包名>,就能直接关联到A的内部包
这种方式适合两个Turborepo独立维护但有依赖关系的场景。
- 在Turborepo A的目标内部包目录下执行
私有包发布
如果两个Turborepo需要跨团队、跨环境协作,把A的内部包发布到私有npm仓库(比如Verdaccio、GitHub Packages)是更稳妥的方式。之后在B的项目里像安装第三方包一样添加依赖,还能通过版本号锁定特定迭代版本或分支。
你的workspaces配置是否符合规范?
你当前在Turborepo B的package.json里写的:
"workspaces": [ "apps/*", "packages/*", "../packages/*" ]
不算常规规范,问题出在:
- 跨目录引用
../packages/*会打破Turborepo的工作区隔离逻辑,容易引发依赖解析混乱,比如A和B的依赖版本冲突、缓存失效等问题。 - 如果B已经嵌套在A的
apps/目录下,A的根workspaces已经覆盖了自身的packages,B作为子工作区完全不需要重复配置跨目录路径,直接引用包名就能正常使用。
如果一定要用嵌套结构,更规范的做法是:
- 只在Turborepo A的根
package.json里配置完整的工作区范围:
"workspaces": [ "apps/*", "packages/*", "apps/turborepo-b/apps/*", "apps/turborepo-b/packages/*" ]
- Turborepo B自己的
package.json只管理自身的工作区:
"workspaces": [ "apps/*", "packages/*" ]
这样Turborepo的缓存机制和依赖管理才能正常运作,避免跨目录引用带来的潜在问题。
内容的提问来源于stack exchange,提问作者Julian Brooks
相关产品推荐
相关产品推荐

