看了官网tsconfig配置文件的说明,不自觉发出一个疑问:当同一个文件出现在include、exclude和files这几个字段中时,最终这个文件是否会被编译呢?于是就有了这篇文章。
TSconfig配置文件的主要目的
- 指定待编译文件;
- 配置编译选项
指定待编译文件常用的方式
- 一种是include和exclude相互配合
- 另一种是files字段指定
PS:也可以三种结合使用
include、files、exclude
-
include:指定编译包含的文件;默认值为:
- 当指定了files字段,默认值为:
[]; - 若未指定,默认值为:
[“**/*”];并表示包含当前项目中的所有文件
- 当指定了files字段,默认值为:
-
exclude:指定当解析
include时需要排除(忽略)的文件列表;默认值是["node_modules", "bower_components", "jspm_packages"]加上outDir选项指定的值。- 注意:exclude只会对include有影响;
- 即使在
exclude中指定的被忽略文件,还是可以通过import操作符、types操作符、///<reference操作符以及在files选项中添加配置的方式对这些被忽略的代码文件进行引用的
-
files:用来指定需要编译的文件列表(注意,只能是文件,不能是文件夹)
- 而且如果files中任意一个文件无法找到,都会抛出错误;
- 这个配置项适用于你想要指定的文件数量比较少,并且不需要使用 glob 模式匹配的情况。否则,请使用 include 配置项
总结
- 大概可以理解为:files这个字段较exclude优先级高,因为exclude只会影响include;其次files和include两者共同决定待编译的文件,即未指定exclude时,待编译的文件时两者指定文件的合集。故有:
- 如果
files和include都未设置,那么除了exclude排除的文件,编译器会默认包含路径下的所有 TS 文件。 - 如果同时设置
files和include,那么编译器会把两者指定的文件都引入。 - 上一条说到,任何被
files或include引入的文件的依赖会被自动引入。反过来,如果B.ts被A.ts依赖,那么B.ts不能被exclude排除,除非A.ts也被排除了。
- 如果