TSConfig中include、exclude和files的优先级

1,410 阅读2分钟

看了官网tsconfig配置文件的说明,不自觉发出一个疑问:当同一个文件出现在include、exclude和files这几个字段中时,最终这个文件是否会被编译呢?于是就有了这篇文章。

TSconfig配置文件的主要目的

  1. 指定待编译文件;
  2. 配置编译选项

指定待编译文件常用的方式

  • 一种是include和exclude相互配合
  • 另一种是files字段指定

PS:也可以三种结合使用

include、files、exclude

  • include:指定编译包含的文件;默认值为:

    • 当指定了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 也被排除了。