JavaScript 模块循环依赖:为什么你的 import 偶尔是 undefined?
在维护一个中型前端项目时,我遇到了一个很隐蔽的问题:某个工具函数在本地开发时运行正常,但打包上线后偶尔报 Cannot read property 'format' of undefined。排查后发现,两个 ES 模块之间形成了循环依赖,而其中一个模块在初始化阶段就使用了另一个模块的导出值。循环依赖在 JavaScript 中并不罕见,尤其是当项目拆分出大量工具模块、常量模块和组件模块后,模块之间很容易因为相互引用而形成环。CommonJS 和 ES Module 对循环依赖的处理机制不同,执行顺序受入口文件和静态分析影响,导致同一份代码在开发环境和生产环境表现不一致。这篇文章会从模块加载机...