各种模块化方案的解释-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

参考资料


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
相关文章
|
4天前
|
前端开发
平台设计-moduleID的使用
整个平台上有很多相同的功能
|
4天前
|
JavaScript 前端开发 开发者
深入了解 AMD 和 CMD 规范:探索模块加载的世界(上)
深入了解 AMD 和 CMD 规范:探索模块加载的世界(上)
|
4天前
|
JavaScript 前端开发 开发工具
深入了解 AMD 和 CMD 规范:探索模块加载的世界(下)
深入了解 AMD 和 CMD 规范:探索模块加载的世界(下)
|
6月前
|
开发框架 前端开发 UED
命令行 ng add @angularpwa 背后运行的机制
命令行 ng add @angularpwa 背后运行的机制
24 0
|
9月前
|
JavaScript 前端开发
深入了解前端开发规范的区别《Commonjs、AMD、CMD、ES6模块化》
深入了解前端开发规范的区别《Commonjs、AMD、CMD、ES6模块化》
75 0
|
9月前
|
JavaScript 前端开发
说说你对JavaScript模块化方案的理解和 CommonJS、AMD、CMD、ES6 Module 分别是什么?
模块化是指将一个复杂问题,自顶向下逐层把系统划分为若干模块的过程。对于整个系统来说,这些模块可组合,分解和更换的单元。对于编程领域的模块化就是遵守固定的原则,将一个大文件拆分成多个独立且相互依赖的小模块。简单理解模块化就是在一个js文件中能够引入另一个js文件
100 0
|
9月前
|
JavaScript API
说说AMD、CMD、commonJS模块化规范的区别?
说说AMD、CMD、commonJS模块化规范的区别?
108 0
|
9月前
|
JavaScript API
AMD、CMD、commonJS模块化规范的区别
AMD、CMD、commonJS模块化规范的区别
56 0
|
10月前
|
JavaScript 前端开发
模块化开发:CommonJS、AMD 和 ES6 Modules 的区别与使用方式
在前端开发中,模块化开发是一种重要的编程方法,它可以帮助我们更好地组织和管理代码,提高代码的可维护性和复用性。在JavaScript中,有多种模块化开发的标准,包括CommonJS、AMD和ES6 Modules。让我们逐一了解它们的区别和使用方式:
115 0
|
JavaScript 前端开发
js 模块化基础和模块规范AMD、CMD、ES6模块
js 模块化基础和模块规范AMD、CMD、ES6模块
88 0

相关实验场景

更多