首页 > 其他分享 >前端模块化CommonJS、AMD、CMD、ES6

前端模块化CommonJS、AMD、CMD、ES6

时间:2024-07-23 19:53:55浏览次数:18  
标签:ES6 CommonJS CMD export 模块 import 加载

在前端开发中,模块化是一种重要的代码组织方式,它有助于将复杂的代码拆分成可管理的小块,提高代码的可维护性和可重用性。CommonJS、AMD(异步模块定义)和CMD(通用模块定义)是三种不同的模块规范,它们在定义模块、加载模块以及依赖管理等方面存在差异,并适用于不同的场景。

CommonJS、AMD、CMD 

一、CommonJS

1. 定义与特点

  • CommonJS是服务器端JavaScript模块化的规范,Node.js是这种规范的实现
  • 一个单独的文件就是一个模块,模块通过module.exports导出接口,通过require()导入其他模块。
  • 加载模块是同步的,即只有加载完成才能执行后面的操作

2. 适用场景

  • 主要用于服务器端JavaScript的模块化开发,如Node.js环境。
  • 适用于模块之间依赖关系明确,且对加载速度要求不高的场景。

二、AMD

1. 定义与特点

  • AMD是RequireJS在推广过程中对模块定义的规范化产出,主要用于浏览器端
  • 使用define()函数定义模块,可以异步加载模块,不会阻塞后续代码的执行。
  • 允许指定回调函数,当所有依赖的模块都加载完成后,会执行这个回调函数

2. 适用场景

  • 适用于浏览器端的大型Web应用,特别是那些需要按需加载模块以减少初始加载时间的场景。
  • 当模块之间的依赖关系复杂,且需要优化加载性能时,AMD是一个不错的选择。

三、CMD

1. 定义与特点

  • CMD是SeaJS在推广过程中对模块定义的规范化产出,也主要用于浏览器端。
  • 与AMD类似,CMD也使用define()函数定义模块,但CMD推崇依赖就近和延迟执行(懒加载)。
  • 只有在真正需要某个模块时,才会去加载和执行它

2. 适用场景

  • 适用于对加载性能有较高要求的浏览器端应用。
  • 当模块数量较多,且大多数模块只在特定条件下才会被使用时,CMD的懒加载特性可以显著减少不必要的加载时间。
CommonJSAMDCMD
定义服务器端JavaScript模块规范浏览器端Javascript模块规范浏览器端JavaScript模块规范
实现Node.jsRequireJSSeaJS
加载方式同步加载异步加载延迟加载(懒加载)
适用场景服务端开发浏览器端大型Web应用,需要优化加载性能浏览器端应用,模块数量多且大多只在特定条件下使用
特点模块定义简单直接依赖前置,异步加载依赖就近,延迟执行

综上所述,CommonJS、AMD和CMD各有其特点和适用场景。在选择模块规范时,需要根据项目的具体需求和目标来决定。例如,对于服务器端JavaScript开发,通常会选择CommonJS;而对于浏览器端的大型Web应用,则可能会考虑使用AMD或CMD来优化加载性能和减少初始加载时间。

ES6(ECMAScript 6)中的模块化语法主要通过importexport两个关键字来实现,这一机制极大地增强了JavaScript代码的组织性、可维护性和可重用性。以下是对ES6模块化语法的详细解析及其优势:

ES6模块化语法

export

export关键字用于规定模块的对外接口,即定义哪些变量、函数、类等可以被其他模块通过import语句导入。其基本用法包括:

直接导出:在模块文件内部,使用export关键字直接导出变量、函数、类等。例如:

export const PI = 3.14;  
export function add(x, y) {  
    return x + y;  
}

统一导出:使用花括号{}将多个导出项组织在一起。例如: 

const PI = 3.14;  
function add(x, y) {  
    return x + y;  
}  
export { PI, add };

 默认导出:每个模块只能有一个默认导出,使用export default关键字。默认导出的内容在导入时可以使用任意名称。例如:

function createCircle(radius) {  
    // ...  
}  
export default createCircle;
import

import关键字用于从其他模块导入功能,即获取其他模块通过export导出的变量、函数、类等。其基本用法包括:

命名导入使用花括号{}明确指定要导入的导出项及其名称。例如

import { PI, add } from './math.js';

 默认导入:使用任意名称导入模块的默认导出项。例如:

import Circle from './circle.js'

整体导入:使用* as语法导入模块的所有导出项,并为它们指定一个命名空间。例如:

import * as math from './math.js';  
console.log(math.PI);  
console.log(math.add(1, 2));

ES6模块化的优势

  1. 显式依赖:ES6模块通过importexport显式地声明了模块之间的依赖关系,这有助于工具进行静态分析,优化加载策略。

  2. 编译时加载:与CommonJS等运行时加载的模块系统不同,ES6模块支持编译时加载这意味着在代码执行之前,模块之间的依赖关系已经确定,有助于提升代码的执行效率

  3. 更好的封装:ES6模块将每个文件视为一个独立的模块,模块内部的所有变量和函数默认都是私有的,只有通过export显式导出的内容才能被其他模块访问,这有助于实现更好的封装和代码隐藏。

  4. 更简洁的语法importexport的语法简洁明了,易于理解和使用,相比CommonJS的requiremodule.exports更加直观。

  5. 支持静态分析:由于ES6模块是静态的,工具可以在不执行代码的情况下分析模块的依赖关系,这有助于实现诸如代码分割、懒加载等优化策略

  6. 支持Tree Shaking:在打包工具(如Webpack、Rollup等)的支持下,ES6模块可以实现Tree Shaking,即自动移除未被引用的代码,从而减小最终打包文件的大小

综上所述,ES6模块化语法通过importexport提供了强大的模块定义和导入功能,不仅提升了代码的组织性和可维护性,还带来了编译时加载、更好的封装、更简洁的语法以及支持静态分析和Tree Shaking等优势。

标签:ES6,CommonJS,CMD,export,模块,import,加载
From: https://blog.csdn.net/m0_55049655/article/details/140644597

相关文章

  • win10 下通过cmd 控制 Oracle Vbox
    win10下命令行控制VBox虚拟机今天虚拟机突然自己休眠了,各种按钮不能用,只能想其他办法了我的安装路径是C:\ProgramFiles\Oracle\VirtualBoxcdC:\ProgramFiles\Oracle\VirtualBox虚拟机的名称是Oracle强制关机C:\ProgramFiles\Oracle\VirtualBox>VBoxManage.execon......
  • 09 ES6的模块化语法
    ECMAScript6(简称ES6)是JavaScript语言的下一代标准,其中引入了许多新特性,包括模块化语法。ES6的模块化语法允许开发者将代码分割成独立的模块,每个模块可以包含变量、函数和其他资源,并且可以在不同的文件中进行导入和导出。导出模块(Export)在ES6中,可以使用export关键字来导出......
  • 尝试在cmd(python)中安装turtle
    当我在cmd中编写pipinstallturtle后,这条消息出现在我面前。有人知道该怎么办吗?C:\>pipinstallturtleCollectingturtleUsingcachedturtle-0.0.2.tar.gz(11kB)ERROR:Commanderroredoutwithexitstatus1:command:'C:\Users\Bruger\App......
  • 08 ES6的for...of和for...in的区别
    在JavaScript中,for...in和for...of是两种不同的循环结构,它们分别在不同的ECMAScript版本中被引入,并且具有不同的用途和特性。for...in循环(ES5)for...in是ECMAScript5(ES5)中引入的,用于遍历对象的可枚举属性和数组的索引。它提供了一种方式来获取对象的键或数组的索引。......
  • 04 ES6中对象的简写
    在ES6中,对象字面量的书写方式进行了一些简化,使得对象的创建更加简洁。以下是ES6中对象简写的几种形式:属性值缩写:当对象的属性名和属性值的变量名相同时,可以省略属性值,只写属性名。//ES5constname='Alice';constage=25;constperson={name:name,a......
  • 谷粒商城实战笔记-35-前端基础-ES6-模块化
    文章目录一,什么是模块化二,export1.`export`语法2.批量导出3.默认导出三,import1,import语法2,批量导入一,什么是模块化模块化编程是一种软件设计技术,它将程序分解为独立的、可复用的部分,每个部分负责执行特定的功能。这种设计方法在多种编程语言中都有应用,包括Jav......
  • 雷电9模拟器-ADB在cmd命令行任意位置都可运行adb
    前言全局说明雷电9模拟器-ADB连接一、说明二、找到雷电自带的adb.exe2.1模拟器默认安装路径:C:\leidian\LDPlayer9\2.2adb.exe路径C:\leidian\LDPlayer9\adb.exe三、adb添加到环境变量添加到环境变量后,在cmd命令行任意位置都可运行adb3.1找到设置地方:https......
  • 多种模块格式,包括 ES, CommonJS, UMD, AMD, SystemJS 和 IIFE的区别点分别是什么
    【转】https://zhuanlan.zhihu.com/p/668530823以下是各种模块格式的主要特点:ESModules(ESM):这是ECMAScript6(ES6)引入的官方标准格式。它支持导入和导出语句,以及静态分析和tree-shaking。它是唯一的静态模块系统,意味着你可以在编译时确定导入和导出的内容。CommonJS(C......
  • Windows中安装python/cmd中执行python命令无效
    1、问题阐述?本文章提供非常详细的安装教程。本文章适合于不会安装python或者安装了python后,在cmd中执行python命令无效的情况。2、下载pythonpython下载官网地址:DownloadPython|Python.org在下面的框子中选择你需要的版本如果是windows选择如下包如下版本下载地址:ht......
  • ES6——Set集合和Map集合练习题
    根据前一篇文章,让ai给我们出下面的练习题:Set练习题创建一个Set并添加数字1到10,然后将其转换为数组并打印。编写一个函数,接收一个数组作为参数,返回一个新的数组,新数组只包含原数组中唯一的元素(去重)。创建一个Set,添加多个元素,然后使用delete方法移除特定元素,打印剩......