Typescript的module配置是什么意思
"module" 决定 编译后的 JS 用哪种模块格式,以及 import/export 怎么解析。
"module" 决定 编译后的 JS 用哪种模块格式,以及 import/export 怎么解析。
"module": "nodenext" 是什么意思
它让 TypeScript 按 Node.js 当前的模块规则 来编译和检查,和 Node 的行为尽量一致。
主要影响:
- 输出格式:看
package.json里的"type""type": "commonjs"输出接近 CommonJS(require/exports)"type": "module"→ 输出 ESM(import/export)
- 路径解析:相对路径要写扩展名,例如
import "./foo.js"(即使源文件是.ts) - 条件导出:会按 Node 的
exports字段解析依赖
简单说:写给 Node 跑的现代项目,官方推荐用 nodenext(或更早的 node16)。
常见写法怎么选
| 值 | 适用场景 |
|---|---|
"nodenext" |
跑在 Node 上,想跟 Node 模块规则对齐(推荐) |
"commonjs" |
传统 Node / 老项目,输出 require |
"esnext" / "es2022" 等 |
交给打包工具(Vite、Webpack)处理,浏览器前端常见 |
"preserve" |
几乎不改写模块语法,留给打包器 |
node项目怎么写
- 继续用 Node → 保持
"nodenext"即可 - 如果想用 ESM(
import/export在运行时也是原生 ESM),把package.json改成"type": "module",module仍用"nodenext"
如果只是随便练 TS、不在意 Node 的严格模块规则,也可以写成:
"module": "commonjs"
这样更简单,但相对路径、扩展名等规则会松一些,和真实 Node 不完全一致。
一句话
- 含义:告诉 TS「按 Node 最新模块体系处理」。
- 怎么写:跑 Node →
"nodenext";交给 Vite 等打包 → 常用"esnext"/"preserve"。
ts