gpt4 book ai didi

typescript - 为 monorepo 扩展 "paths"tsconfig 文件

转载 作者:行者123 更新时间:2023-12-03 13:41:45 34 4
gpt4 key购买 nike

我有一个像这样的文件夹结构:

- mono-repo
tsconfig.paths.json
- Website
tsconfig.json
- src
test.ts
index.ts
- Tool
- src
index.ts

// mono-repo/tsconfig.paths.json
{
"compilerOptions": {
"paths": {
"tool": ["Tool/src"],
}
}
}
// mono-repo/Website/src/index.ts
import { test } from "test";
import { tool } from "tool";

test(tool);

我希望能够扩展 tsconfig.paths.json这样每个包都为其他包正确输入了模块导入。

尝试 1 失败

// mono-repo/Website/tsconfig.json
{
"extends": "../tsconfig.paths.json",
"compilerOptions": {
"baseUrl": "./src",
}
}

问题:找不到模块“工具”。添加到路径的 baseUrl 指向 mono-repo/Website/src/Tool/src .这不是一条真正的道路。

尝试 2 失败

// mono-repo/Website/tsconfig.json
{
"extends": "../tsconfig.paths.json",
"compilerOptions": {
"baseUrl": "../",
}
}

问题:无法从“测试”导入测试。 baseUrl 不是项目 src。除了相对路径之外的任何东西都是不可导出的。

实用但丑陋的尝试 3

// mono-repo/tsconfig.paths.json
{
"compilerOptions": {
"paths": {
"tool": ["../../Tool/src"],
}
}
}

// mono-repo/Website/tsconfig.json
{
"extends": "../tsconfig.paths.json",
"compilerOptions": {
"baseUrl": "./src",
}
}

问题:有效,但假设扩展 tsconfig.paths.json 的每个 tsconfig 的 baseUrl 始终是 mono-repo 下的两个目录.这目前适用于我的项目,但我犹豫是否将其作为标准。

如何为 monorepo 设置可扩展的“路径”tsconfig json?

最佳答案

要知道的是 tsconfig extends 是一个 overridenot a merge .
有了这些信息,您就可以了解通过扩展基本 tsconfig 来实现的目标无法按预期工作。
此外,使用 paths选项应始终与 baseUrl 配对使用为了解决分辨率问题。
尽管如此,这里有一个解决方案,您可以使用它来解决该问题。
在项目的根级别创建一个 tsconfig.json,如下所示:

"paths": {
"~/*": ["../../../mono-repo/*/src"]
}
这意味着在每个子包中,您可以扩展 tsconfig文件,然后指定您的 src目录为 baseUrl .然后您将能够按以下方式导入:
import { tool } from "~/Tool";
希望清楚,让我知道是否缺少某些东西=)

关于typescript - 为 monorepo 扩展 "paths"tsconfig 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59256368/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com