各种模块化方案的解释-AMD-CMD-Module

简介: 各种模块化方案的解释-AMD-CMD-Module

1. 前言

1.最近在找工作,也刷些题查漏补缺,毕竟工作时间长了,容易思维固化,就像拿着锤子的人看什么都像钉子

  1. 确实在工作中容易忽略很多东西,正好的个机会,就记录下自己的学习当然也会有些自己面试的题分享

2. 是什么模块化 what

  1. 模块化方案是一种组织管理代码的方法,通过将代码划分为独立的模块,可以提高代码的可维护性、复用性和可扩展性。
  2. 模块化方案允许开发者将功能单元封装在模块中,并通过导入(引用)和导出(暴露)的机制实现模块之间的依赖关系和交互

3. 常见的模块化方案

  • 顺序 书写
  1. CommonJS
  2. AMD
  3. CMD
  4. ES Module
  • IIFE:使用自执行函数来编写模块化
  1. 特点:在一个单独的函数作用域中执行代码,避免变量冲突
  2. 这个其实更早了

(function(){
  return {
    data:[]
  }
})()

4. CommonJS

  1. CommonJS 是一种模块化方案,最早是为了解决 Node.js环境中的模块化问题而提出的
  2. 使用require函数导入模块,使用module.exportsexports导出模块
  3. CommonJS 采用同步加载模块的方式,适用于服务器端环境或编译打包工具(如Webpack)中

// 导入模块
const moduleA = require('./moduleA');
// 导出模块
module.exports = {
  // 模块内容
};
  • 注意

不可以exports = xxx,这样写会无效,

因为更改了exports的地址,而 exports 是 module.exports 的引用指向的是同一个内存,模块最后导出的是 module.exports


5. AMD(Asynchronous Module Definition):

1.AMD 是一种异步加载模块的方案,主要用于浏览器环境

  1. 使用 define函数定义模块,使用require函数异步加载依赖的模块
  2. AMD方案适合在浏览器环境中按需加载模块,可以提高页面加载性能

// 定义模块
define(['moduleA', 'moduleB'], function(moduleA, moduleB) {
  // 模块内容
});
// 异步加载模块
require(['moduleA'], function(moduleA) {
  // 回调函数
});
  • 依赖前置

所有的依赖必须写在最初的依赖数组中,速度快,

但是会浪费资源,预先加载了所有依赖不管你是否用到


6. CMD(Common Module Definition)

  1. CMD 是另一种异步加载模块的方案,也主要用于浏览器环境
  2. 使用 define函数定义模块,使用 require函数异步加载依赖的模块
  3. CMD 方案更加注重模块的延迟执行,适合在浏览器环境中按需加载模块

// 定义模块
define(function(require, exports, module) {
  const moduleA = require('moduleA');
  const moduleB = require('moduleB');
  // 模块内容
});
// 异步加载模块
require(['moduleA'], function(moduleA) {
  // 回调函数
});
  • 依赖就近

用到了再引用依赖,方便了开发,缺点是速度和性能较差


7. ES Module(ES6 Module)

  1. ES Module 是 ECMAScript 6 引入的官方模块化方案,现在已成为 JavaScript 的标准
  2. 使用importexport关键字进行模块的导入和导出
  3. ES Module 支持静态分析,使得一些工具可以进行更高效的代码优化和打包。

// 导入模块
import moduleA from './moduleA';
// 导出模块
//export default在同一个文件中只可存在一个(一个模块只能有一个默认输出)
export default {
  // 模块内容
};
// 1. 导出:通过export 或 export default 输出模块  
// 写法1: 边声明,边导出  
export var m = 1;  
export function m() {};  
export class M {};  
// 写法2:导出一个接口 export {},形似导出对象但不是, 本质上是引用集合,最常用的导出方法  
export {  
  attr1,  
  attr2  
}

8. 注意

  1. 不同的模块化方案在语法和使用方式上有所差异,因此在不同的环境和项目中选择合适的方案很重要
  2. 很多现代的前端框架和工具已经默认使用 ES Module,比如 Vue.js 和 React

参考资料


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
相关文章
|
关系型数据库 数据库 PostgreSQL
|
6月前
|
虚拟化 iOS开发 MacOS
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 Intel 网卡特殊定制版
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 Intel 网卡特殊定制版
119 7
VMware ESXi 7.0U3s macOS Unlocker & OEM BIOS 2.7 Intel 网卡特殊定制版
|
12月前
|
安全 程序员 编译器
【实战经验】17个C++编程常见错误及其解决方案
想必不少程序员都有类似的经历:辛苦敲完项目代码,内心满是对作品品质的自信,然而当静态扫描工具登场时,却揭示出诸多隐藏的警告问题。为了让自己的编程之路更加顺畅,也为了持续精进技艺,我想借此机会汇总分享那些常被我们无意间忽视却又导致警告的编程小细节,以此作为对未来的自我警示和提升。
1235 101
|
10月前
|
安全 前端开发
如何制作网站?
本文介绍了自助建站的步骤和平台选择,包括选择域名、租用服务器和部署网站。推荐使用PageAdmin CMS平台,无代码建站,后期维护简单。
186 13
|
10月前
|
存储 关系型数据库 MySQL
【MYSQL】 ——索引(B树B+树)、设计栈
索引的特点,使用场景,操作,底层结构,B树B+树,MYSQL设计栈
|
Web App开发 前端开发 JavaScript
网页浏览和编辑DWG快速入门的方法(WEB CAD SDK)
MxDraw云图在线CAD解决方案,包括MxDraw、MxCAD开发包、图纸转换程序和后端服务。支持多种平台和CPU架构,推荐使用最新版Chrome或Edge浏览器。提供AutoCAD各版本dwg格式支持,具备三维和二维编辑功能。提供入门开发指南和功能丰富的示例。用户可下载开发包进行功能演示,包括在线预览和编辑CAD图纸。
1429 111
网页浏览和编辑DWG快速入门的方法(WEB CAD SDK)
|
11月前
|
数据采集 监控 异构计算
transformers+huggingface训练模型
本教程介绍了如何使用 Hugging Face 的 `transformers` 库训练一个 BERT 模型进行情感分析。主要内容包括:导入必要库、下载 Yelp 评论数据集、数据预处理、模型加载与配置、定义训练参数、评估指标、实例化训练器并开始训练,最后保存模型和训练状态。整个过程详细展示了如何利用预训练模型进行微调,以适应特定任务。
720 3
|
12月前
|
存储 机器学习/深度学习 人工智能
文档智能与RAG技术在LLM中的应用评测
本文介绍了阿里云在大型语言模型(LLM)中应用文档智能与检索增强生成(RAG)技术的解决方案,通过文档预处理、知识库构建、高效检索和生成模块,显著提升了LLM的知识获取和推理能力,尤其在法律、医疗等专业领域表现突出。
1022 1
|
12月前
|
SQL 监控 关系型数据库
使用SQL语句查询操作耗时的技巧与方法
在数据库管理和优化过程中,了解SQL查询操作的耗时是至关重要的
1477 0
|
存储 前端开发 JavaScript
使用JavaScript实现复杂功能——一个交互式音乐播放器
使用JavaScript实现复杂功能——一个交互式音乐播放器