我有两个项目:app
和lib
。app
取决于lib
.
app
是一个严格的 Typescript 项目,lib
不适用于 strict。
我使用打字稿项目参考将它们连接在一起:
./tsconfig.json
"compilerOptions": {
"strict": true,
},
"references": [
{ "path": "./apps/app" },
{ "path": "./libs/lib/" }
]
./apps/app/tsconfig.json
"extends": "../../tsconfig.json",
"references": [
{
"path": "../../libs/lib/tsconfig.json"
}
]
./libs/lib/tsconfig.json
"extends": "../../tsconfig.json",
"compilerOptions": {
"composite": true,
"strict": false
},
但是当我运行app
时,我遇到了失败lib
因为代码的运行就好像严格是真的一样:
TSError: ⨯ Unable to compile TypeScript:
../../libs/lib/src/index.ts:4:3 - error TS2564: Property 'uninitializedProperty' has no initializer and is not definitely assigned in the constructor.
但是lib
将严格指定为假!如果只是禁用严格,它可以正常工作。如何配置 Typescript,以便项目实际上是独立的,并且每个项目中的代码使用自己的 tsconfig 选项?
我在这里准备了一个示例存储库:https://github.com/gaggle/monorepo-tsconfig-experiment。欢迎任何想法和建议!
只是为了给我的问题一些上下文:我想将多个项目移动到单个 monorepo 中,但并非所有代码都可以使用相同的编译器选项。"严格"差异就是一个例子,我不能只修复代码,以便它都使用相同的选项。
我让你的示例存储库很容易构建 - 我遇到的唯一麻烦是它不完整,这告诉我你实际上并没有尝试构建它。Project.json 缺少依赖项。
但更重要的是,我可以说你没有花太多时间阅读项目参考是如何工作的,没有阅读太多的项目参考页面。所以我犹豫是否只是为你做工作并给你最终答案。相反,我会给你一个你不理解的事情的清单,提示你做错了什么。
这些是您出错tsconfig
设置:
composite
rootDir
include
files
你的三个tsconfig
中的每一个都至少有一件事是错误的。
修复这些问题并tsc -b .
,tsc -b apps/app
和tsc -b libs/lib
都将按预期工作。
如果你取得了进步,但仍然感到困惑或卡住,那么我会提供帮助。更新示例存储库和你的问题,并显示你已尝试。