主题
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、__dirname、require.main、require.cache等 CJS 专属变量或 API。 - 解析相对路径时可省略扩展名和目录入口,但这会增加隐式规则;新代码应写清路径。
与 ESM 互操作
ESM 可以默认导入 CJS:
js
import pkg from './legacy.cjs'CJS 不可直接 require() 一个含顶层 await 的 ESM;需要时使用异步的 import()。不要依赖从 CJS 推断出的具名导出,默认导入更稳妥。
