js的模块化规范

18 阅读1分钟

CommonJS 和 ES Module 是 JavaScript 中两种主流的模块化规范,它们帮助开发者更好地组织和管理代码。下面这个表格能让你快速抓住它们的核心区别。

特性CommonJSES Module (ESM)
设计初衷主要为服务器端(Node.js)设计作为官方的 ECMAScript 标准,用于浏览器和服务器
语法关键词require()和 module.exports/exportsimport和 export
加载方式同步加载(运行时)异步加载(编译时确定依赖,支持静态分析)
输出特性值的拷贝。一旦导出,模块内部变化不影响已导入的值。值的引用(动态绑定)。导入的值会随导出模块内部的变化而更新。
适用环境传统上主要用于 Node.js,在浏览器中需借助打包工具现代浏览器和 Node.js 均原生支持
Tree Shaking不支持静态分析,难以进行有效的 Tree Shaking天然支持,打包工具可消除未使用代码
循环依赖处理返回已执行部分的值,可能导致不完整的结果通过引用绑定处理,相对更安全
顶层 this指向指向当前模块指向 undefined
动态导入require()可在代码块中动态调用使用 import()函数实现动态导入