【发布时间】:2021-09-10 07:31:45
【问题描述】:
我有两个项目:app 和 lib。 app 依赖于 lib。
app 是一个严格的 Typescript 项目,lib 不工作严格。
我使用 Typescript 项目参考将它们连接在一起:
"compilerOptions": {
"strict": true,
},
"references": [
{ "path": "./apps/app" },
{ "path": "./libs/lib/" }
]
"extends": "../../tsconfig.json",
"references": [
{
"path": "../../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 指定 strict 为 false!如果严格被禁用,它工作正常。如何配置 Typescript,使项目实际上是独立的,并且每个项目中的代码都使用自己的 tsconfig 选项?
我在这里准备了一个示例存储库:https://github.com/gaggle/monorepo-tsconfig-experiment。欢迎任何想法和建议!
只是为我的问题提供一些背景信息:我想将多个项目移动到一个 monorepo,但并非所有代码都可以使用相同的编译器选项。 “严格”的区别就是一个例子,我不能只修复代码,所以它们都可以使用相同的选项。
【问题讨论】:
-
我不认为
ts-node使用--build构建项目,但需要后者来激活项目引用构建。 github.com/TypeStrong/ts-node/issues/897 -
令人着迷。谢谢你。如果没有 ts-node,我将如何使其工作?我可以在应用程序中运行
tsc -b并看到它构建了lib,我不知道它会起作用,所以我已经在学习了。但是输出仍然无法运行,我收到SyntaxError: Unexpected token 'export'之类的错误,所以我什至不知道如何在 ts-node 之外运行。 -
"main": "src/index.ts",需要指向dist版本。 “main”是 NodeJS 在导入lib时尝试加载的内容。在您的情况下,TypeScript 链接在“main”中,但 NodeJS 无法读取 TypeScript 源代码。 TypeScript 构建为 commonjs(根据您的设置)并将其结果放入dist文件夹。使用"main": "dist/index.js",它应该可以工作。 -
我不知道为什么,但
libs/lib的 dist 文件夹以src文件夹结束,所以我将其 package.json 字段设置为"main": "dist/src/index.js"。我仍然遇到错误,但是当我什至无法解释为什么src文件夹位于 libs/lib 而不是应用程序/应用程序的 dist 时,我觉得我可能遗漏了一些非常基本的概念。但是感谢您的提示,我已将示例存储库更改为将 main 指向 JS。
标签: typescript tsconfig monorepo strict