模块化是将代码拆分为独立、可复用、有明确输入输出的小单元;CommonJS 同步加载、支持运行时动态引入但导出值拷贝且不支持 tree-shaking;ESM 是官方标准,静态声明、导出引用、支持异步加载和编译期优化。
模块化就是把代码拆成独立、可复用、有明确输入输出的小单元,每个文件管好自己的事,不互相污染。
它用 同步加载,靠 require() 引入,module.exports 导出。模块第一次加载后会缓存,后续再 require 直接返回缓存结果。
require,运行时决定要不要加载require('./' + name)
它用 静态声明,靠 import 和 export,必须写在文件顶层,不能放在条件或函数里。
.js 后缀(如 import './util.js')import('./module.js') 返回 Promise,适合懒加载
新项目统一用 ESM —— 语法更清晰、工具链支持好、是语言标准。Node.js 从 v14 开始稳定支持 ESM,只需加 "type": "module" 或用 .mjs 后缀。
require 一个 ESM 文件会报错;ESM 中也不能直接 import CommonJS 的 module.exports 对象(但 Node.js 有兼容层,通常能转成命名空间对象)import(),它在两种环境都可用,返回 Promiserequire 会尝试兼容,但建议逐步迁出基本上就这些。