Skip to content

Commit c4036e2

Browse files
committed
配置文件中的 ${configDir} 模版变量
5.5
1 parent 4df1c14 commit c4036e2

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

zh/release-notes/typescript-5.5.md

+64
Original file line numberDiff line numberDiff line change
@@ -616,3 +616,67 @@ export function z() {
616616
Titian 在推动独立声明实现方面发挥了关键作用,并在之前的多年里一直是 TypeScript 项目的贡献者。
617617

618618
更多详情请参考 [PR](https://github.com/microsoft/TypeScript/pull/58201)
619+
620+
## 配置文件中的 `${configDir}` 模版变量
621+
622+
在许多代码库中都会重用某个 `tsconfig.json` 作为其它配置文件的“基础”。
623+
这是通过在 `tsconfig.json` 文件中使用 `extends` 字段实现的。
624+
625+
```ts
626+
{
627+
"extends": "../../tsconfig.base.json",
628+
"compilerOptions": {
629+
"outDir": "./dist"
630+
}
631+
}
632+
```
633+
634+
其中一个问题是,`tsconfig.json` 文件中的所有路径都是相对于文件本身的位置。
635+
这意味着如果您有一个被多个项目使用的共享 `tsconfig.base.json` 文件,那么派生项目中的相对路径通常不会有用。
636+
例如,请想象以下 `tsconfig.base.json`
637+
638+
```ts
639+
{
640+
"compilerOptions": {
641+
"typeRoots": [
642+
"./node_modules/@types"
643+
"./custom-types"
644+
],
645+
"outDir": "dist"
646+
}
647+
}
648+
```
649+
650+
如果作者的意图是每个继承此文件的 `tsconfig.json` 都应:
651+
652+
1. 输出到相对于派生 `tsconfig.json``dist` 目录,并且
653+
2. 有一个相对于派生 `tsconfig.json``custom-types` 目录,
654+
655+
那么这样做是行不通的。
656+
`typeRoots` 路径将是相对于共享 `tsconfig.base.json` 文件的位置,而不是继承它的项目。
657+
每个继承此共享文件的项目都需要声明自己的 `outDir``typeRoots`,并且内容相同。
658+
这可能会让人沮丧,并且在项目之间保持同步可能会很困难。
659+
虽然上面的示例使用了 `typeRoots`,但这对于路径和其他选项来说是一个常见问题。
660+
661+
为了解决这个问题,TypeScript 5.5 引入了一个新的模板变量 `${configDir}`
662+
当在 `tsconfig.json``jsconfig.json` 文件的某些路径字段中写入 `${configDir}` 时,此变量将在给定编译中替换为配置文件的所在目录。
663+
这意味着上述 `tsconfig.base.json` 可以重写为:
664+
665+
```ts
666+
{
667+
"compilerOptions": {
668+
"typeRoots": [
669+
"${configDir}/node_modules/@types"
670+
"${configDir}/custom-types"
671+
],
672+
"outDir": "${configDir}/dist"
673+
}
674+
}
675+
```
676+
677+
现在,当一个项目继承此文件时,路径将相对于派生的 `tsconfig.json`,而不是共享的 `tsconfig.base.json` 文件。
678+
这使得在项目之间共享配置文件变得更加容易,并确保配置文件更具可移植性。
679+
680+
如果您打算使一个 `tsconfig.json` 文件可继承,请考虑是否应该用 `${configDir}` 替代 `./`
681+
682+
更多详情请参考 [设计](https://github.com/microsoft/TypeScript/issues/57485)[PR](https://github.com/microsoft/TypeScript/pull/58042)

0 commit comments

Comments
 (0)