Skip to content

CommonJS

CommonJS(CJS)使用 require 加载模块、module.exports 导出值。它是 Node.js 的传统模块系统;新建应用通常优先 ESM,但仍需理解 CJS 以维护存量代码和依赖。

js
// math.cjs
function add(a, b) {
  return a + b
}

module.exports = { add }

// app.cjs
const { add } = require('./math.cjs')

特性

  • 模块在首次加载时执行并缓存;重复 require() 通常得到同一导出对象。
  • require() 是同步的,适合启动时加载,不应在性能敏感路径动态调用。
  • 提供 __filename__dirnamerequire.mainrequire.cache 等 CJS 专属变量或 API。
  • 解析相对路径时可省略扩展名和目录入口,但这会增加隐式规则;新代码应写清路径。

与 ESM 互操作

ESM 可以默认导入 CJS:

js
import pkg from './legacy.cjs'

CJS 不可直接 require() 一个含顶层 await 的 ESM;需要时使用异步的 import()。不要依赖从 CJS 推断出的具名导出,默认导入更稳妥。

基于 MIT 许可发布