返回博客列表

Typescript的module配置是什么意思

"module" 决定 编译后的 JS 用哪种模块格式,以及 import/export 怎么解析。

"module" 决定 编译后的 JS 用哪种模块格式,以及 import/export 怎么解析

"module": "nodenext" 是什么意思

它让 TypeScript 按 Node.js 当前的模块规则 来编译和检查,和 Node 的行为尽量一致。

主要影响:

  1. 输出格式:看 package.json 里的 "type"
    • "type": "commonjs"输出接近 CommonJS(require / exports
    • "type": "module" → 输出 ESM(import / export
  2. 路径解析:相对路径要写扩展名,例如 import "./foo.js"(即使源文件是 .ts
  3. 条件导出:会按 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

相关推荐