TypeScript 中的 module
说明 tsconfig 里的 module 主要控制什么模块格式被输出,以及为什么它经常和 moduleResolution 一起出现但不等价。
#tech / dev
#resource / typescript
#type / concept
#status / growing
[!info] related notes
TypeScript 中的 module
一句话定义
module 主要决定 TypeScript 输出的 JavaScript 会采用什么模块格式。
核心机制 / 工作原理
它回答的是:
这段 TypeScript 最终 emit 成什么模块形态。
例如:
commonjs更偏require/module.exportsesnext更偏保留import/exportnodenext则要结合现代 Node 的双模块系统来决定每个文件如何输出
最小例子 / 最小场景
CommonJS
{
"compilerOptions": {
"module": "commonjs"
}
}
ES Modules
{
"compilerOptions": {
"module": "esnext"
}
}
边界与易混淆点
module 不负责“怎么找模块”
它主要管输出格式,不等于模块解析算法本身。
module 也不负责“这个文件算不算模块文件”
这层更接近:
但 module 又会反过来影响解析条件
尤其在 nodenext / node16 这类模式里,最终输出会是 import 还是 require,会进一步影响 package exports 的条件选择。
参考信息
- TSConfig
module: https://www.typescriptlang.org/tsconfig/module