TS模块解析流程

「这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

不知不觉又是一年小雪......

前言

前面我们已经讲了很多关于TS的知识了,包括基础的类型、接口、类型、泛型、枚举、类型推论和兼容性以及模块和命名空间等

今天讲的还是TS相关的内容,叫TS模块解析流程

什么是模块解析

定义

关于什么是TS模块解析,套用官方的一句话就是:

模块解析是指编译器在查找导入模块内容时所遵循的流程

在查找导入模块内容时所遵循的流程,其实应该其实很容易理解

举例

举个例子,帮助你理解清楚

假设我们从模块moduleA中导入一个a,即import { a } from "moduleA"

例子中的a就是要导入的模块内容

这里的模块解析流程就是:编译器在解析a到底是什么东西的过程,编译器需要准确的知道a是什么,会去检查它所在的定义它的模块moduleA,即解析这个模块

所以编译器会有个疑问:“模块moduleA的结构是怎样的?”

下面来讲讲的解析的大致过程

解析过程

1. 遵循策略去查找模块

首先,编译器会尝试查找表示导入模块的文件

编译器会遵循以下二种策略之一: ClassicNode。 这些策略会告诉编译器到哪里去查找moduleA

2. 定位外部模块声明

如果上面的解析失败了并且模块名是非相对的(且是在"moduleA"的情况下),编译器会尝试定位一个外部模块声明

3. 记录错误

如果编译器还是不能解析这个模块,它会记录一个错误。

在这种情况下,错误可能为 error TS2307: Cannot find module 'moduleA'

最后总结如下图:

image.png

备注

看完你可能不明白文中提到了两种解析策略(ClassicNode),没关系,下篇文章会详细说说这两种策略,欢迎继续阅读~

END

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

猜你喜欢

转载自juejin.im/post/7033257482621288484