我对我想象中的一个微不足道的问题束手无策,但我公司的多个开发人员已经为此感到困惑了一段时间。
我们正在迁移到 monorepo,其中将包括我们的遗留代码库,主要是为了我们可以从旧 API 中提取类型。我们正在使用 Turborepo 和 pnpm。
相关部分文件结构如下
├── services
│ ├── backend
│ │ ├── $some_files
│ ├── nest-api
│ ├── $some_files
backend
包中的一些代码包含一个import type { Baz } from "@acme/nest-api/src/modules/foo/bar/baz"
语句,该语句从nest-api
包中提取类型。当 tsc 在 backend
包上运行时,tsc 尝试使用 nest-api
包中的 tsconfig
文件中的配置构建整个 backend
包,但会失败,因为 nest-api
包需要更宽松的配置。
在 tsc 日志中,它指的是像
../nest-api/src/modules/foo/bar/baz.ts:15
这样的文件 - 我很困惑 tsc 如何逃脱 backend/src
中所有文件的范围并进入这个目录。是否有一个简单的 tsconfig 设置我们错过了或者正在进行其他操作?
我知道这是一个模糊的问题,但我真的希望有人可以提供帮助 - 如果需要,我可以提供更多详细信息,但老实说,我不确定要提供什么!
运行
turbo run build --filter nextjs
应该会导致存储库成功构建。相反,它失败了。
我在 pnpm 上遇到了这个问题。
在项目根目录的 tsconfig.json 文件中 确保您使用的是“参考文献”部分。
我的设置已经开始工作了 制作一个 tsconfig.base.json,其中包含整个项目的通用 tsc 设置。
tsconfig.json 扩展 tsconfig.base.json 并包含对所有 monorepo 包的引用。
然后,您还可以使用项目根目录下的 tsconfig.base.json 来扩展这些引用的 tsconfig.json 文件
您还可以自动管理引用(您仍然需要运行脚本) “update-ts-references”包就可以解决这个问题。