「Node.js」ESModule 与 CommonJS 的 区别
CommonJS 与 ES Modules (ESM) 是 Node.js 中用于模块化编程的两种规范。
CommonJS:
- 同步加载模块,一旦代码执行到require语句,就会立即加载模块。
- 每个模块都有自己的作用域,模块内部定义的变量、函数或类都是私有的,只能在当前模块内访问。
- 模块对象(exports)作为module.exports的引用,可以用来导出函数、对象、变量等。
ES Modules (ESM):
- 使用import和export关键字来导入和导出模块。
- 异步加载模块,只有在运行到import语句时,才会去加载和执行模块。
- 默认导出一个模块时,使用export default,导入时可以使用任意名称。
- 支持静态导入(static import),可以在导入时只引入模块内部的特定方法或变量。
CommonJS 和 ES Modules 的主要区别在于它们的加载机制以及对异步代码的支持。
例子代码:
CommonJS:
// math.js (CommonJS)
exports.add = function(a, b) {
return a + b;
};
// 使用模块
const math = require('./math.js');
console.log(math.add(2, 3)); // 输出: 5
ES Modules:
// math.js (ESM)
export function add(a, b) {
return a + b;
}
// 使用模块
import { add } from './math.js';
console.log(add(2, 3)); // 输出: 5
评论已关闭