TS模块解析策略之Classic
在前面的两篇文中,我们了解了TS
模块解析流程,以及了解了TS中的相对和非相对模块导入有什么差异,其中文中都有提到TS的模块解析策略:编译器会根据Classic
或Node
解析策略,去到对应的地方查找模块
相关文章可以移步以下链接:
- TS模块解析流程
- 你知道TS中的相对和非相对模块导入有什么不同吗?
今天我们要聊的就是其中的一种解析策略:
Classic
其实我们可以使用--moduleResolution
标记来指定使用哪种模块解析策略
如果没有用该标记来指定,区分Classic策略也比较简单,如果使用了 --module AMD | System | ES2015
,则默认为Classic
,其他情况为Node
关于Classic
策略,记住一下两点即可:
第一,相对导入的模块是相对于导入它的文件进行解析
因此 /root/src/folder/A.ts
文件里的import { b } from "./moduleB"
会使用下面的查找流程:
/root/src/folder/moduleB.ts
/root/src/folder/moduleB.d.ts
第二,对于非相对模块的导入,编译器则会从包含导入文件的目录开始依次向上级目录遍历,尝试定位匹配的声明文件
例如:有一个对moduleB
的非相对导入import { b } from "moduleB"
,它是在/root/src/folder/A.ts
文件里,会以如下的方式来定位"moduleB"
:
/root/src/folder/moduleB.ts
/root/src/folder/moduleB.d.ts
/root/src/moduleB.ts
/root/src/moduleB.d.ts
/root/moduleB.ts
/root/moduleB.d.ts
/moduleB.ts
/moduleB.d.ts
Classic
存在的理由主要是为了向后兼容
END
除了Classic
解析策略,还有一个Node
解析策略,之后的文章会讲到
以上就是本文的所有内容,如有问题,欢迎指正~
转载自:https://juejin.cn/post/7034131135172968461