Sep*_*eed 8 typescript tsconfig monorepo
我有一个像这样的文件夹结构:
- mono-repo
tsconfig.paths.json
- Website
tsconfig.json
- src
test.ts
index.ts
- Tool
- src
index.ts
Run Code Online (Sandbox Code Playgroud)
- mono-repo
tsconfig.paths.json
- Website
tsconfig.json
- src
test.ts
index.ts
- Tool
- src
index.ts
Run Code Online (Sandbox Code Playgroud)
// mono-repo/Website/src/index.ts
import { test } from "test";
import { tool } from "tool";
test(tool);
Run Code Online (Sandbox Code Playgroud)
我希望能够进行扩展,tsconfig.paths.json以便每个包都为其他包正确输入模块导入。
失败的尝试 1
// mono-repo/tsconfig.paths.json
{
"compilerOptions": {
"paths": {
"tool": ["Tool/src"],
}
}
}
Run Code Online (Sandbox Code Playgroud)
问题:找不到模块“工具”。添加到路径的 baseUrl 指向mono-repo/Website/src/Tool/src. 这不是一条真正的道路。
失败的尝试 2
// mono-repo/Website/src/index.ts
import { test } from "test";
import { tool } from "tool";
test(tool);
Run Code Online (Sandbox Code Playgroud)
问题:无法从“测试”导入测试。baseUrl 不是项目 src。除了相对路径之外的任何东西都将无法导出。
实用但丑陋的尝试 3
// mono-repo/Website/tsconfig.json
{
"extends": "../tsconfig.paths.json",
"compilerOptions": {
"baseUrl": "./src",
}
}
Run Code Online (Sandbox Code Playgroud)
// mono-repo/Website/tsconfig.json
{
"extends": "../tsconfig.paths.json",
"compilerOptions": {
"baseUrl": "../",
}
}
Run Code Online (Sandbox Code Playgroud)
问题:有效,但假设扩展 tsconfig.paths.json 的每个 tsconfig 的 baseUrl 将始终是下面的两个目录mono-repo。这对于我的项目目前是正确的,但我犹豫是否将其作为标准。
如何为 monorepo 设置可扩展的“路径”tsconfig json?
Adr*_*tti 12
需要知道的是 tsconfig extends 是一个overrideand not a merge。有了这些信息,您就可以了解到您试图通过扩展基本 tsconfig 来实现的目标无法按您期望的方式工作。
此外,使用这些paths选项应始终与 成对使用,baseUrl以解决分辨率问题。
尽管如此,这里有一个可以用来解决该问题的解决方案。
在项目的根级别创建一个 tsconfig.json,如下所示:
"paths": {
"~/*": ["../../../mono-repo/*/src"]
}
Run Code Online (Sandbox Code Playgroud)
这意味着在每个子包中,您可以扩展该tsconfig文件,然后将您的src目录指定为baseUrl. 然后您将可以按如下方式导入:
import { tool } from "~/Tool";
Run Code Online (Sandbox Code Playgroud)
希望很清楚,如果有什么遗漏请告诉我=)
| 归档时间: |
|
| 查看次数: |
2777 次 |
| 最近记录: |