gpt4 book ai didi

TypeScript `tsc` 没有在子目录中提取 tsconfig.json?

转载 作者:行者123 更新时间:2023-12-04 12:19:21 25 4
gpt4 key购买 nike

我有以下目录结构:

.
├── tsconfig.json ("module": "CommonJS")
└── foo/
├── node-file.ts
└── bar/
├── browser-file.ts
└── tsconfig.json ("module": "esnext")
tsconfig.jsonmodule设置为 CommonJS因为我希望我的大部分文件都为 Node.js 编译。但是里面 bar ,我希望文件编译为 JavaScript 模块,所以我设置了 moduleesnext .
现在当我运行时 tsc从根本上,我希望 node-file.ts编译为 CommonJS模块和 browser-file.ts编译为 JavaScript 模块。但这不是我得到的。看来 tsc完全无视 foo/bar/tsconfig.json并且只捡起根 tsconfig.json .
(我在开发时也使用 tsc --watch,所以我试图避免必须运行两个不同的 tsc 进程来编译两个不同的目标。对我来说,运行单个 tsc 和嵌套的 tsconfig.json 文件对我来说应该给我想要的结果。)
有谁知道我做错了什么?

最佳答案

TypeScript 只使用一个 tsconfig.json并且不会自动使用子目录的 tsconfig.json对于那里的文件。但是,您可以使用 project references为了这。
创建这样的目录结构:

.
├── tsconfig.json
├── tsconfig.settings.json (optional)
└── foo/
├── node-file.ts
├── tsconfig.json ("module": "commonjs")
└── bar/
├── browser-file.ts
└── tsconfig.json ("module": "esnext")
tsconfig.json
{
"files": [],
"references": [
{"path": "./foo"},
{"path": "./foo/bar"}
]
}
这是根 tsconfig.json .当您运行时 tsc --build (见下文)在根目录中,TypeScript 将构建引用的项目 ./foo/tsconfig.json./foo/bar/tsconfig.json . "files": []是制止意外 tsc s 没有 --build从尝试编译根目录中的所有内容,这会出错但会创建多个 .js文件在可能不正确的地方。 tsconfig.settings.json (可选的)
{
"compilerOptions": {
"strict": true,
"noImplicitReturns": true
}
}
你可以把配置通用到 foofoo/bar并使用 extends 扩展此配置以减少重复。请注意,此处的所有相对路径都将相对于 tsconfig.settings.json 解析。扩展时,类似 "outDir": "dist"可能无法按预期工作。 foo/tsconfig.json
{
"extends": "../tsconfig.settings.json",
"exclude": ["bar/**/*.ts"],
"compilerOptions": {
"module": "commonjs"
}
}
这是 CommonJS 文件的配置。它还扩展了通用配置并排除了 foo/bar 中的文件. foo/bar/tsconfig.json
{
"extends": "../../tsconfig.settings.json",
"compilerOptions": {
"module": "esnext"
}
}
这与 foo 非常相似的配置。

建筑
编译 foofoo/bar同时,从根目录使用构建模式:
tsc --build # or tsc -b
# Watch mode:
tsc --build --watch # or tsc -b -w
来自 the handbook :

A long-awaited feature is smart incremental builds for TypeScript projects. In 3.0 you can use the --build flag with tsc. This is effectively a new entry point for tsc that behaves more like a build orchestrator than a simple compiler.

Running tsc --build (tsc -b for short) will do the following:

  • Find all referenced projects
  • Detect if they are up-to-date
  • Build out-of-date projects in the correct order

You can provide tsc -b with multiple config file paths (e.g. tsc -b src test). Just like tsc -p, specifying the config file name itself is unnecessary if it’s named tsconfig.json.


您还可以编译单个项目:
tsc -b foo # or cd foo && tsc
tsc -b foo/bar # or cd foo/bar && tsc
请注意,这是一些仅限构建的标志和 you cannot override compiler options with command-line arguments .

关于TypeScript `tsc` 没有在子目录中提取 tsconfig.json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64626846/

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