[TS] TS模块解析模式和优先级

typescript的模块解析模式有两种: "node" 和 "classic"。

可以在tsconfig.json中通过配置moduleResolution选项来指定解析策略
{
"compilerOptions": {

  "moduleResolution": "node" // 'node' 或 'classic'

}
}
如果未指定,那么在compilerOptions.module === "amd" || "system" || "es2015"时默认值为classic模式。compilerOptions.module为其它情况时("none", "commonjs", "umd")则为node模式。

拓展名优先级顺序补充:
typescript 查找扩展名顺序由先到后依次是 .ts -> .tsx -> .d.ts

1. classic模式

1.1 classic模式 相对路径解析

只找"文件名.ts"、"文件名.tsx"、"文件名.d.ts",找完就结束

// 文件绝对路径 /root/src/folder/moduleA.ts
// ↓ moduleA.ts中
import { b } from "./moduleB"

查找流程如下:
/root/src/folder/moduleB.ts
/root/src/folder/moduleB.tsx
/root/src/folder/moduleB.d.ts
查找结束

后文会省略 .tsx

1.2 classic模式 非相对路径解析

先找"文件名.ts",再找"../文件名.ts",再找"../../文件名.ts" (文件夹目录依次向上)

// 文件绝对路径 /root/src/folder/moduleA.ts
// ↓ moduleA.ts中
import { b } from "moduleB"

查找流程如下:
/root/src/folder/moduleB.ts
/root/src/folder/moduleB.d.ts
/root/src/moduleB.ts
/root/src/moduleB.d.ts
/root/moduleB.ts
/root/moduleB.d.ts
/moduleB.ts
/moduleB.d.ts
查找结束

2. node模式

2.1 node模式 相对路径解析

先找"文件名.ts",再找 "文件夹名/index.ts",找完结束。

// 文件绝对路径 /root/src/folder/moduleA.ts
// ↓ moduleA.ts中
import { b } from "./moduleB"

查找流程如下:
/root/src/folder/moduleB.ts
/root/src/folder/moduleB.d.ts
/root/src/folder/moduleB/index.ts
/root/src/folder/moduleB/index.d.ts
查找结束

2.2 node模式 非相对路径解析

先找"./node_modules/文件名.ts",再找"./node_modules/文件夹名/index.ts"

如果此时没找到且有上级目录,
继续找"../node_modules/文件名.ts",再找"../node_modules/文件夹名/index.ts"

// 文件绝对路径 /root/src/folder/moduleA.ts
// ↓ moduleA.ts中
import { b } from "moduleB"

查找流程如下:
/root/src/folder/node_modules/moduleB.ts
/root/src/folder/node_modules/moduleB.d.ts
/root/src/folder/node_modules/moduleB/package.json (如果指定了"types"属性)
/root/src/folder/node_modules/moduleB/index.ts
/root/src/folder/node_modules/moduleB/index.d.ts
/root/src/node_modules/moduleB.ts
/root/src/node_modules/moduleB.d.ts
...
/node_modules/moduleB.ts
/node_modules/moduleB.d.ts
/node_modules/moduleB/index.ts
/node_modules/moduleB/index.d.ts
查找结束

完结
同步更新到自己的语雀
https://www.yuque.com/diracke...

你可能感兴趣的:([TS] TS模块解析模式和优先级)