Node.js 词条目录
前端Wiki/词条/CommonJS 与 ESM

CommonJS 与 ESM

定义Node 的两套模块系统:CommonJS(require/module.exports)与 ES Modules(import/export)

CommonJS 是 Node 的原生模块规范:require() 同步加载模块,module.exports 导出。它是「运行时」的:require 可以写在 if 里、导出值可以是动态计算结果,模块输出的是「值的拷贝」。

ESM 是语言标准(import/export),静态结构可在编译期做 Tree Shaking,导出是「值的绑定」。Node 双规范并存:靠 package.json 的 "type": "module" 或文件后缀(.mjs 强制 ESM、.cjs 强制 CJS)区分。两套系统互操作有讲究:CJS require ESM 要用动态 import();ESM import CJS 只能 default 导入或具名导出兼容的包。新项目统一 ESM。

JavaScript
// ---- CommonJS(math.cjs)----
const PI = 3.14;
function add(a, b) { return a + b; }
module.exports = { PI, add };        // 导出
// 使用:const { add } = require('./math');

// ---- ESM(math.mjs)----
export const PI = 3.14;              // 具名导出
export function add(a, b) { return a + b; }
export default function multiply() {} // 默认导出
// 使用:import add, { PI } from './math.mjs';

// ---- 互操作:CJS 里异步加载 ESM ----
// (require 不支持 ESM,只能动态 import)
async function load() {
  const { add } = await import('./math.mjs');
  return add(1, 2);
}
⚠ 常见误区
🔗 相关词条npm 与 package.jsonTree Shaking模块化
← 返回来源章节CommonJS:require 与 module.exports