Angular-cli忽略tsconfig.json文件

9

使用

"@angular/cli": "^1.0.0"

@angular/cli 忽略 tsconfig.json

即使编辑或删除了 tsconfig.json,该项目仍能成功编译。

为什么会这样?

2个回答

8
没有 $ROOT/tsconfig.json 文件,你的项目仍然可以编译,这是因为 @angular/cli 支持在根目录下有多个应用程序;你的(单一)应用程序使用 $ROOT/src/tsconfig.app.json 进行编译,而你的测试套件则使用 $ROOT/src/tsconfig.spec.json 进行编译。根目录下的 tsconfig.json 适用于该目录下的所有应用程序。删除它只是删除了可能与许多应用程序一起使用的全局 tsconfig
要更清楚地理解这一点,请查看 .angular-cli.json。其中一个属性 app 支持多个应用程序的数组,但默认配置仅支持一个应用程序。如 @angular/cli/lib/config/schema.json 中所述,app 支持“此项目中不同应用程序的属性”。
"app": [{
  "root": "src"
  ...
  "tsconfig": "tsconfig.app.json",
  "testTsconfig": "tsconfig.spec.json"
}]

使用这个数组,您可以拥有任意数量的Angular应用程序,每个应用程序都具有自己特定的TypeScript设置。
此外,@angular/cli的命令支持使用--app标志多个应用程序。 ng serve --app foo将服务于foo应用程序,而ng serve --app bar将服务于bar应用程序。此标志还适用于ng buildng e2eng ejectng testng xi18n。要向现有的$ROOT目录添加新的应用程序,请使用ng new
tsconfig不仅适用于代码编辑器和tslint,它也适用于项目中的所有应用程序。底层实现比较复杂,可以从源代码中看到,其中有许多json文件,例如"extends": "../../../tsconfig.json"

1
非常有帮助。由于 tsconfig.app.json 的自定义名称,您是否知道是否可以从根目录手动编译 tsc 命令以模拟 ng build? - kampsj

7

尽管看起来很蠢,但 angular-cli 的 tsconfig.json 文件位于 src/tsconfig.app.json 内。

编辑器(如 vscode)将使用根目录下的 tsconfig.json 文件。


您可以告诉您的编辑器使用 src/tsconfig.app.json,为什么要有两个不同的配置文件? - Ahmed Musallam
@AhmedMusallam,angular-cli 似乎默认创建了两个。 - zurfyx
实际上,在angular-cli 1.0.0中有3个文件,分别是app、e2e和test。不管怎样,我的观点是关于为应用程序创建2个tsconfig文件的。 - Ahmed Musallam
@AhmedMusallam 我不确定 Angular 团队为什么要这样做。但是,如果你共享不同的配置,通常希望拥有不同的配置文件。在这种情况下,src/tsconfig.app.json 将是更具体的配置文件。但是,本回答的目的并不是改变他们的做法,而是指出正确的配置文件。 - zurfyx
你可以拥有尽可能多的内容,只要你能够证明它是合理的。在他们的情况下,我相信这与他们如何转换.ts测试文件和应用程序文件有关。 - Ahmed Musallam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接