JavaScript模块化编程:CommonJS与ES6 Modules
CommonJS 和 ES6 Modules 是 JavaScript 中两种不同的模块化编程规范。它们分别针对服务器端(如 Node.js 环境)和浏览器端的开发需求而设计。
- CommonJS(CJS):
CommonJS 是 Node.js 中的模块系统规范。它主要用于服务器端 JavaScript 开发。CommonJS 定义了三个重要的全局变量:require
、exports
和 module
。
require
函数:用于导入其他模块。const fs = require('fs')
会导入 Node.js 的文件系统模块。exports
对象:用于定义当前模块要暴露的接口。其他模块可以通过require
函数来访问这些接口。module
对象:包含模块的元信息,如module.id
、module.filename
和module.exports
等。module.exports
与exports
对象在 CommonJS 中实际上是同一个对象,但它们可以互换使用。
CommonJS 模块示例:
// math.js
const add = (a, b) => a + b;
exports.add = add;
// main.js
const math = require('./math');
console.log(math.add(1, 2)); // 输出 3
- ES6 Modules(ESM):
ES6 Modules 是 ECMAScript 2015(ES6)标准中引入的模块系统规范。它旨在取代 CommonJS 和 AMD 等其他模块系统,成为浏览器和服务器端通用的模块解决方案。
ES6 Modules 主要使用以下两个关键字:
import
:用于导入其他模块。import { readFile } from 'fs'
会导入fs
模块的readFile
函数。export
:用于定义当前模块要暴露的接口。其他模块可以通过import
关键字来访问这些接口。
ES6 Modules 模块示例:
// math.js
export const add = (a, b) => a + b;
// main.js
import { add } from './math';
console.log(add(1, 2)); // 输出 3
总结:
- CommonJS 主要用于 Node.js 环境,而 ES6 Modules 旨在成为浏览器和服务器端通用的模块解决方案。
- CommonJS 使用
require
和exports
对象,而 ES6 Modules 使用import
和export
关键字。 - ES6 Modules 支持导入导出默认值、具名导出、导入所有导出项等高级功能,而 CommonJS 不支持这些特性。
- 随着 Node.js 的发展,ES6 Modules 逐渐在服务器端得到支持。在现代 JavaScript 项目中,建议优先使用 ES6 Modules。