常用的模块化几种方式
文章类型:ES6
发布者:hp
发布时间:2023-05-20
1:模块化是指将代码按照功能和责任划分为独立的模块,以实现代码的组织、复用和维护的一种方式
2:在过去,常使用全局变量和命名空间来组织代码,但这种方式存在命名冲突、依赖管理困难等问题
1:立即执行函数,来实现模块化,通过函数作用域解决命名冲突,污染全局作用域问题
(function(globalVariable){
globalVariable.test = function() {}
// ... 声明各种变量、函数都不会污染全局作用域
})(globalVariable)2:AMD 和 CMD:
A:相同点:
是一种异步加载模块的规范,适用于浏览器端的模块化开发。它使用 define 函数来定义模块,使用 require 函数来异步加载模块
都是异步加载,可以按需加载模块,提高性能
支持模块依赖声明和导出,明确模块之间的关系
B:不同点:
AMD模块依赖关系需要在定义时声明,而CMD不需要,是动态声明
AMD模块加载和执行是异步的,需要加载完成后执行,而 CMD是延迟执行,需要的时候才执行,是按需加载
AMD依赖模块和顺序都是提前定义好的,而CMD是动态的,根据实际情况加载
// 定义模块
define(['moduleA', 'moduleB'], function(moduleA, moduleB) {
// ...
return {
// ...
};
});
// 异步加载模块
require(['moduleA', 'moduleB'], function(moduleA, moduleB) {
// ...
});
3:CommonJS:使用 require 和 module.exports 来导入和导出模块。在 Node.js 环境中,可以直接使用 CommonJS 模块化
支持动态导入
是一种同步导入
导出值是拷贝,如果需要更新,则重新导入一次
// 导入模块
const moduleA = require('./moduleA');
// 导出模块
module.exports = {
// ...
};
4:ES Module:原生实现的模块化方案
使用 import 和 export 关键字来导入和导出模块
是一种异步导入
采用实时绑定方式,导入导出值指向内存同一地址,会实时变化
在编译时进行静态分析,有助于优化代码的加载和执行
// 导入模块
import { moduleA, moduleB } from './module';
// 导出模块
export default {
// ...
};
1:可以解决命令冲突,提供复用性
2:提高代码可维护性
暂无评论,快来发表第一条评论吧~