使用模块与命名空间来组织代码的方法。 我们也会谈及命名空间和模块的高级使用场景,和在使用它们的过程中常见的陷阱。
TypeScript 的模块解析(Module Resolution)是指在编译时确定模块之间的依赖关系和如何解析模块名称的过程。模块解析是 TypeScript 在处理模块化代码时非常重要的一部分,它确保了在编译阶段能够正确地找到和加载模块。
1. 模块解析的种类
TypeScript 支持两种主要的模块解析策略:
- Classic 模式:也称为相对路径模式或相对路径引用模式。
- Node 模式:也称为非相对路径模式或模块解析模式。
2. Classic 模式
Classic 模式是 TypeScript 的旧模块解析策略,主要用于处理在 TypeScript 刚刚推出时的模块系统。它的特点包括:
- 相对路径引用:使用相对路径或者以
./
或../
开头的路径来引用模块。 - baseUrl 和 paths 配置:通过
tsconfig.json
中的baseUrl
和paths
配置来映射模块名称到实际路径。 - 不支持 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
字段可以指定使