返回

技术视角解析TS模块解析策略之Classic

前端

在前面的两篇文章中,我们了解了TS模块解析流程,以及了解了TS中的相对和非相对模块导入有什么差异,其中文中都有提到TS的模块解析策略,我们知道TS模块解析策略有两种,一种是Classic,一种是Node,这两种策略各有千秋,在实际开发中也各有优缺点,在本文中,我们将重点关注Classic模块解析策略,解析其工作原理,比较不同策略间的差异,并通过实际示例展示如何使用Classic策略进行模块导入和导出,希望能够为开发人员提供有益的参考资料。

Classic模块解析策略的工作原理

Classic模块解析策略是一种相对路径解析策略,它将模块的相对路径解析为相对于当前模块的文件路径,这种解析策略简单易懂,而且与CommonJS模块解析策略兼容,因此在实际开发中得到了广泛的应用。

在Classic模块解析策略中,模块的相对路径可以分为两种,一种是相对于当前文件的路径,另一种是相对于根目录的路径,对于相对于当前文件的路径,Classic模块解析策略会直接将该路径解析为相对于当前模块的文件路径,而对于相对于根目录的路径,Classic模块解析策略会先将该路径解析为相对于根目录的绝对路径,然后再将该绝对路径解析为相对于当前模块的文件路径。

例如,在以下代码中,我们使用Classic模块解析策略导入了math模块:

import * as math from "math";

在这个例子中,math模块的相对路径是相对于根目录的路径,因此Classic模块解析策略会先将该路径解析为相对于根目录的绝对路径/Users/username/project/node_modules/math,然后再将该绝对路径解析为相对于当前模块的文件路径/Users/username/project/src/app.ts,最后成功导入math模块。

Classic模块解析策略与Node模块解析策略的差异

Classic模块解析策略与Node模块解析策略都是TS模块解析策略,但它们之间也存在一些差异,这些差异主要体现在以下几个方面:

  • 解析路径不同 :Classic模块解析策略使用相对路径解析模块的路径,而Node模块解析策略使用绝对路径解析模块的路径。
  • 解析顺序不同 :Classic模块解析策略先将相对路径解析为相对于当前文件的路径,然后再将相对于当前文件的路径解析为相对于根目录的路径,而Node模块解析策略直接将相对路径解析为相对于根目录的路径。
  • 兼容性不同 :Classic模块解析策略与CommonJS模块解析策略兼容,而Node模块解析策略与CommonJS模块解析策略不兼容。

如何使用Classic模块解析策略进行模块导入和导出

要使用Classic模块解析策略进行模块导入和导出,我们需要在tsconfig.json文件中配置"moduleResolution": "classic",配置好之后,我们就可以使用以下语法进行模块导入和导出:

  • 模块导入
import * as math from "math";
  • 模块导出
export const PI = 3.14;

总结

Classic模块解析策略是一种相对路径解析策略,它简单易懂,而且与CommonJS模块解析策略兼容,因此在实际开发中得到了广泛的应用,在本文中,我们解析了Classic模块解析策略的工作原理,比较了不同策略间的差异,并通过实际示例展示了如何使用Classic策略进行模块导入和导出,希望能够为开发人员提供有益的参考资料。