前端知库

ES Modules 和 CommonJS 有哪些关键区别?

参考答案

ES Modules 具有可静态分析的 import/export 结构,导出通常是实时绑定;CommonJS 在执行时通过 require 与 module.exports 提供模块值。浏览器原生支持 ESM,CommonJS 主要存在于 Node.js 与工具链兼容场景。

ESM 的静态结构有利于依赖分析和 tree shaking,但副作用仍影响是否能删除代码。动态 import 返回 Promise,可用于代码分割。循环依赖在两种系统中的初始化行为不同,不能只记成“一个拷贝、一个引用”就涵盖全部情形。

Node.js 中 .mjs、.cjs 与 package.json 的 type 会影响解释方式。两种模块互操作的默认导出、命名导出推断和异步加载有环境差异,应查具体 Node 与打包工具文档,避免依赖偶然可用的导入写法。