CommonJS和ECMAScript模块是JavaScript中用于组织和共享代码的两种规范。
- CommonJS
在Node.js环境中,模块系统遵循CommonJS规范。在这种规范下,每个JavaScript文件都是一个独立的模块,其中定义的变量和函数都是私有的,不会污染全局作用域。
// math.js
exports.add = function(a, b) {
return a + b;
};
// 使用模块
const math = require('./math.js');
console.log(math.add(1, 2)); // 输出: 3
- ECMAScript Modules
ECMAScript Modules(ESM)是JavaScript的现行标准,它定义了如何导入和导出模块。
// math.js
export function add(a, b) {
return a + b;
};
// 使用模块
import { add } from './math.js';
console.log(add(1, 2)); // 输出: 3
两者的主要区别在于导入导出语法的不同,以及模块的执行方式。在CommonJS中,模块是动态执行的,这意味着require时会执行模块内的代码。而在ESM中,模块是静态执行的,这意味着import/export语句只是创建模块之间的依赖关系,在真正的运行时,只有当模块第一次被调用时,它的代码才会被执行。