「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战」
不知不觉又是一年小雪......
前言
前面我们已经讲了很多关于TS
的知识了,包括基础的类型、接口、类型、泛型、枚举、类型推论和兼容性以及模块和命名空间等
今天讲的还是TS
相关的内容,叫TS
模块解析流程
什么是模块解析
定义
关于什么是TS
模块解析,套用官方的一句话就是:
模块解析是指编译器在查找导入模块内容时所遵循的流程
在查找导入模块内容时所遵循的流程,其实应该其实很容易理解
举例
举个例子,帮助你理解清楚
假设我们从模块moduleA
中导入一个a
,即import { a } from "moduleA"
例子中的a
就是要导入的模块内容
这里的模块解析流程就是:编译器在解析a
到底是什么东西的过程,编译器需要准确的知道a
是什么,会去检查它所在的定义它的模块moduleA
,即解析这个模块
所以编译器会有个疑问:“模块moduleA
的结构是怎样的?”
下面来讲讲的解析的大致过程
解析过程
1. 遵循策略去查找模块
首先,编译器会尝试查找表示导入模块的文件
编译器会遵循以下二种策略之一: Classic或Node。 这些策略会告诉编译器到哪里去查找moduleA
。
2. 定位外部模块声明
如果上面的解析失败了并且模块名是非相对的(且是在"moduleA"的情况下),编译器会尝试定位一个外部模块声明
3. 记录错误
如果编译器还是不能解析这个模块,它会记录一个错误。
在这种情况下,错误可能为 error TS2307: Cannot find module 'moduleA'
最后总结如下图:
备注
看完你可能不明白文中提到了两种解析策略(Classic
和Node
),没关系,下篇文章会详细说说这两种策略,欢迎继续阅读~
END
以上就是本文的所有内容,如有问题,欢迎指正~