VVLL.net

Module Resolution(模块解析)

日期:2024-08-22 09:58:31

使用模块与命名空间来组织代码的方法。 我们也会谈及命名空间和模块的高级使用场景,和在使用它们的过程中常见的陷阱。

TypeScript 的模块解析(Module Resolution)是指在编译时确定模块之间的依赖关系和如何解析模块名称的过程。模块解析是 TypeScript 在处理模块化代码时非常重要的一部分,它确保了在编译阶段能够正确地找到和加载模块。

1. 模块解析的种类

TypeScript 支持两种主要的模块解析策略:

  • Classic 模式:也称为相对路径模式或相对路径引用模式。
  • Node 模式:也称为非相对路径模式或模块解析模式。

2. Classic 模式

Classic 模式是 TypeScript 的旧模块解析策略,主要用于处理在 TypeScript 刚刚推出时的模块系统。它的特点包括:

  • 相对路径引用:使用相对路径或者以 ./../ 开头的路径来引用模块。
  • baseUrl 和 paths 配置:通过 tsconfig.json 中的 baseUrlpaths 配置来映射模块名称到实际路径。
  • 不支持 Node 模块解析:不会考虑 Node.js 中 node_modules 的结构,主要用于处理不符合 CommonJS 或 AMD 模块规范的模块系统。

示例 tsconfig.json 配置:

{
  "compilerOptions": {
    "baseUrl": "./src",
    "paths": {
      "mylib": ["lib/mylib"]
    }
  }
}

3. Node 模式

Node 模式是目前推荐的模块解析策略,特点包括:

  • 非相对路径引用:使用非相对路径来引用模块,如模块名称(如 import * as foo from 'foo')。
  • Node.js 核心模块解析:可以直接引用 Node.js 核心模块(如 import * as fs from 'fs')。
  • 支持 node_modules:支持像 Node.js 一样的 node_modules 结构,可以从当前文件的目录结构中自动解析出依赖模块。

示例 tsconfig.json 配置:

{
  "compilerOptions": {
    "moduleResolution": "node"
  }
}

4. 配置 tsconfig.json

tsconfig.json 中,通过 moduleResolution 字段可以指定使