hand
_1_11_163
4
返回栏目
0k
2k
1k
2k
1k
1k
1k
2k
2k
2k
1k
2k
1k
2k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
1k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
1k
2k
1k
1k
1k
1k
1k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
1k
1k
2k
1k
1k
2k
2k
1k
2k
1k
1k
2k
2k
2k
3k
3k
2k
3k
2k
3k
3k
3k
1k
2k
3k
2k
2k
3k
3k
2k
2k
6k
3k
2k
2k
5k
3k
4k
3k
3k
2k
4k
3k
3k
2k
3k
3k
1k
4k
4k
4k
2k
5k
3k
2k
3k
4k
3k
3k
4k
2k
3k
3k
4k
2k
2k
3k
4k
3k
3k
2k
5k
2k
3k
3k
3k
3k
2k
3k
3k
3k
2k
2k
2k
2k
3k
2k
2k
2k
3k
2k
2k
2k
2k
2k
2k
0.1k
0.2k
3k
2k
3k
2k
0.1k
2k
2k
4k
2k
2k
1k
2k
2k
3k
3k
3k
3k
2k
2k
3k
3k
3k
4k
3k
3k
4k
3k
2k
2k
3k
3k
3k
3k
3k
3k
2k
3k
3k
4k
4k
3k
3k
2k
2k
3k
2k
2k
1k
2k
3k
1k
2k
2k
2k
2k
2k
2k
2k
2k
2k
4k
2k
3k
2k
1k
2k
2k
2k
2k
2k
3k
2k
3k
1k
2k
2k
2k
0k
2k
2k
2k
2k
2k
2k
2k
3k
2k
2k
1k
1k
3k
2k
3k
1k
2k
1k
2k
2k
2k
2k
3k
1k
3k
2k
2k
2k
2k
2k
2k
1k
2k
2k
4k
3k
3k
2k
2k
2k
2k
2k
2k
4k
3k
3k
3k
2k
2k
2k
2k
2k
2k
3k
4k
返回前端 - Javascript栏目
作者:
贺及楼
成为作者
更新日期:2025-02-21 20:14:25
在软件开发领域,模块化开发是一种重要的编程范式。对于 JavaScript 而言,模块化开发就是把一个大的程序按照功能或者业务逻辑拆分成多个小的、相互独立且可复用的模块,每个模块负责单一的功能,模块之间可以相互依赖和调用。
CommonJS 是服务器端模块规范,主要用于 Node.js 环境。它采用同步加载模块的方式,非常适合服务器端开发,因为服务器端的文件都存储在本地,同步加载不会造成性能问题。
// 定义模块 math.js
function add(a, b) {
return a + b;
}
module.exports = {
add: add
};
// 使用模块 main.js
const math = require('./math.js');
const result = math.add(1, 2);
console.log(result);
require
引入模块时,会阻塞后续代码的执行,直到模块加载完成。AMD 是一种异步模块定义规范,主要用于浏览器环境。它解决了 CommonJS 同步加载模块在浏览器中可能导致的性能问题,允许模块异步加载。
// 定义模块 math.js
define(function () {
function add(a, b) {
return a + b;
}
return {
add: add
};
});
// 使用模块 main.js
require(['math'], function (math) {
const result = math.add(1, 2);
console.log(result);
});
require
和 define
函数实现模块的异步加载,不会阻塞页面的渲染。CMD 也是一种异步模块定义规范,由国内的 Sea.js 推广而来。它和 AMD 类似,但在模块定义和加载方式上有所不同。
// 定义模块 math.js
define(function (require, exports, module) {
function add(a, b) {
return a + b;
}
exports.add = add;
});
// 使用模块 main.js
define(function (require) {
const math = require('math');
const result = math.add(1, 2);
console.log(result);
});
ES6(ES2015)引入了原生的模块化规范,使得 JavaScript 在语言层面上支持模块化开发。它结合了 CommonJS 和 AMD 的优点,既支持静态分析,又支持动态导入。
// 定义模块 math.js
export function add(a, b) {
return a + b;
}
// 使用模块 main.js
import { add } from './math.js';
const result = add(1, 2);
console.log(result);
.mjs
扩展名或者在 package.json
中设置 "type": "module"
)。模块化规范 | 加载方式 | 适用环境 | 特点 |
---|---|---|---|
CommonJS | 同步 | 服务器端(Node.js) | 简单易用,适合服务器端文件同步加载 |
AMD | 异步 | 浏览器 | 解决同步加载在浏览器中的性能问题,适合动态加载模块 |
CMD | 异步 | 浏览器 | 就近依赖,按需加载,代码结构清晰 |
ES6 Modules | 静态导入,支持动态导入 | 浏览器和服务器 | 语言层面原生支持,有利于代码静态分析和优化 |
不同的模块化规范适用于不同的场景,开发者可以根据项目的需求和特点选择合适的模块化规范。在现代前端开发中,ES6 Modules 逐渐成为主流,因为它是 JavaScript 原生支持的规范,具有良好的兼容性和发展前景。
前端 - Javascript
整章节共299节
快分享给你的小伙伴吧 ~