TS模块解析策略之Classic

3,600 阅读2分钟

在前面的两篇文中,我们了解了TS模块解析流程,以及了解了TS中的相对和非相对模块导入有什么差异,其中文中都有提到TS的模块解析策略:编译器会根据ClassicNode解析策略,去到对应的地方查找模块

相关文章可以移步以下链接:

其实我们可以使用--moduleResolution标记来指定使用哪种模块解析策略

如果没有用该标记来指定,区分Classic策略也比较简单,如果使用了 --module AMD | System | ES2015,则默认为Classic,其他情况为Node

关于Classic策略,记住一下两点即可:

第一,相对导入的模块是相对于导入它的文件进行解析

因此 /root/src/folder/A.ts文件里的import { b } from "./moduleB"会使用下面的查找流程:

  1. /root/src/folder/moduleB.ts
  2. /root/src/folder/moduleB.d.ts 第二,对于非相对模块的导入,编译器则会从包含导入文件的目录开始依次向上级目录遍历,尝试定位匹配的声明文件

例如:有一个对moduleB的非相对导入import { b } from "moduleB",它是在/root/src/folder/A.ts文件里,会以如下的方式来定位"moduleB"

  1. /root/src/folder/moduleB.ts
  2. /root/src/folder/moduleB.d.ts
  3. /root/src/moduleB.ts
  4. /root/src/moduleB.d.ts
  5. /root/moduleB.ts
  6. /root/moduleB.d.ts
  7. /moduleB.ts
  8. /moduleB.d.ts

Classic存在的理由主要是为了向后兼容

END

除了Classic解析策略,还有一个Node解析策略,之后的文章会讲到

以上就是本文的所有内容,如有问题,欢迎指正~