·更新于 2026年4月21日· 59 次浏览 JavaScript工程化

ES Modules 与 CommonJS:互操作与打包边界

`import` / `export` 静态分析与 tree-shaking;`require` 动态路径限制;在 Node 与 Vite 中混用时的典型坑。

ES Modules 与 CommonJS:互操作与打包边界
ZHOU YI

作者

ZHOU YI

ESM 在编译期即可确定依赖图,有利于摇树优化;CJS 的 module.exports 多在运行时解析,工具链难以静态剔除。

js
// CJS 中动态 import 返回 Promise
async function load() {
  const { fn } = await import('./plugin.mjs')
  return fn()
}

Node 字段

  • "type": "module".cjs / .mjs 扩展名
  • __dirname 在 ESM 中需 import.meta.url 自行推导
  • 部分仅 CJS 包需 createRequire 或等待官方 dual package

Guestbook

留言

若这篇文章也曾停在你心上,留一行字吧,我会看的。

先确认一下邮箱

多这一步,是为了少些机器骚扰,也让我能更踏实地读每一条真人写下的字。验证码 10 分钟内有效;同一邮箱 60 秒内只能发一封。

本文留言

0已加载 0

这里还静悄悄的——愿意做第一个留下脚印的人吗?