推荐答案
在 JavaScript 中,常用的模块化方案有以下几种:
CommonJS
- 主要用于 Node.js 环境。
- 使用
require导入模块,module.exports导出模块。 - 示例:
// 导出模块 module.exports = { add: (a, b) => a + b, }; // 导入模块 const math = require('./math'); console.log(math.add(2, 3)); // 输出 5
AMD (Asynchronous Module Definition)
- 主要用于浏览器环境,支持异步加载模块。
- 使用
define定义模块,require加载模块。 - 示例:
// www.javascriptcn.com code example // 定义模块 define(['dependency'], function(dependency) { return { add: (a, b) => a + b, }; }); // 加载模块 require(['math'], function(math) { console.log(math.add(2, 3)); // 输出 5 });
UMD (Universal Module Definition)
- 兼容 CommonJS 和 AMD,同时支持全局变量方式。
- 示例:
// www.javascriptcn.com code example (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD define(['dependency'], factory); } else if (typeof exports === 'object') { // CommonJS module.exports = factory(require('dependency')); } else { // 全局变量 root.myModule = factory(root.dependency); } }(this, function (dependency) { return { add: (a, b) => a + b, }; }));
ES Modules (ESM)
- 现代 JavaScript 标准,支持静态分析和异步加载。
- 使用
import导入模块,export导出模块。 - 示例:
// 导出模块 export const add = (a, b) => a + b; // 导入模块 import { add } from './math.js'; console.log(add(2, 3)); // 输出 5
本题详细解读
CommonJS
- 适用场景:Node.js 环境。
- 特点:同步加载模块,适合服务器端开发。
- 缺点:不支持浏览器环境中的异步加载。
AMD
- 适用场景:浏览器环境。
- 特点:异步加载模块,适合需要动态加载的场景。
- 缺点:语法相对复杂,不适合 Node.js 环境。
UMD
- 适用场景:兼容多种环境(浏览器、Node.js)。
- 特点:通过条件判断支持 CommonJS 和 AMD,同时支持全局变量。
- 缺点:代码复杂度较高。
ES Modules
- 适用场景:现代 JavaScript 开发(浏览器和 Node.js)。
- 特点:静态分析支持,异步加载,语法简洁。
- 缺点:需要现代环境支持(如浏览器或 Node.js 12+)。