JavaScript里面的模块化4种方式(CommonJS,AMD,CMD,es6Module)

前端Javascript模块化 CommonJS与ES Module区别 ES Module 的静态结构支持编译时删除未使用代码(如 Webpack 的 Tree Shaking),而 CommonJS 因动态加载无法实现此优化。ES Module的普及促使npm生态向ESM迁移,工具链(如Webpack、Rollup、Vite)全面支持ESM,形成从开发到构建的完整解决方案。从“脚本堆砌”到“工程化设计”,模块化推动了组件化开发、Monorepo架构和微前端实践,例如通过Webpack和Vite实现模块联邦与即时编译。模块化通过独立作用域隔离变量,避免全局命名冲突。 阅读详情

JS的模块化大致有CommonJS,AMD,CMD,es6Module四种。那么它们到底有什么相同和不同之处呢?

CommonJS

CommonJS:在Node中使用,同步加载模块。在esModule还没有出现时,为Node主要模块化解决方案。
导入:

const moduleA = require("./modulePath") 
const { moduleB } = require("./modulePath") 

导出:

module.exports = moduleA // 默认模块
module.exports.moduleB = moduleB // 具名模块

AMD

由于CommonJS规范是同步的,并不适合在浏览器端使用,因为浏览器资源和请求都是异步的,所以模块之间的引用应该也是异步的。

AMD:在浏览器使用,异步加载模块
导入:

require(['moduleA'], function(mA) { ...... })

导出:

define(function() { return moduleA })

require.js使用AMD规范

CMD

CMD:在浏览器中使用,异步加载模块
导入:

define(function(require) {
  let moduleA = require("./modulePath") // 同步
  let moduleB = async("./modulePath", function(mB) { ...... }) // 异步
})

导出:

define(function(requie, exports, module) {
  module.exports = moduleA
})

sea.js使用CMD规范

AMD和CMD的不同

CMD的加载是按照就近规则进行的,AMD依赖的是前置;CMD在加载的使用的时候会把模块变为字符串解析一遍才知道依赖了哪个模块;

es6Module

es6Module:在Node和浏览器中都可以使用.
导入:

import moduleA from "./modulePath" // 默认模块
import { moduleB } from "./modulePath" // 具名模块

导出:

export default (x, y) => x + y // 导出默认模块
export function moduleB() {} // 导出具名模块

CommonJS和es6Module的不同

CommonJS的模块导入require()是同步的,不会返回Promise或者回调函数。会立刻读取和执行文件。

es6Module的模块导入是异步的,调用import()语句时不会立刻运行导入的文件。而是会异步读取文件。构建模块依赖图。最后才开始运行代码,对应依赖时才开始运行。

es6Module模块默认使用严格模式,this不指向全局对象,可以使用顶级await(Top-level await)。所以两种模块导入模式完全不能兼容。在html中script标签需要添加属性type="module"时才能导入es6Module。

前端模块化,AMD,CMD,ES6 Module,CommonJS,ES6 模块与CommonJS 模块的差异 前端模块化 问题: 为什么前端要使用模块化? ​ 模块化: 是具有特定功能的一个对象( 广义理解 ) ​ 模块定义的流程: ​ 1.定义模块(对象) ​ 2.导出模块 ​ 3.引用模块 ​ 好处: 可以存储多个独立的功能块 复用性高 分类 1. AMD AMD规范采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函... 阅读详情

相关推荐

无人机通信安全渗透测试:从信号拦截到GPS欺骗的完整攻防框架

在物联网和智能设备普及的背景下,无线通信安全成为关键基础设施防护的核心环节。其原理在于,通过软件定义无线电等设备对空中的射频信号进行捕获、分析与模拟,从而评估通信协议在加密、认证和防重放等方面的脆弱性。这项技术的价值在于,它能主动发现并修复系统设计缺陷,避免因信号被拦截或欺骗导致设备被劫持、数据泄露等重大安全事件。其应用场景广泛,涵盖消费电子、工业控制及关键基础设施等领域。本文聚焦于无人机这一典型移动物联网终端,深入探讨如何构建一套针对其通信链路的渗透测试方法论,其中涉及信号拦截、协议逆向等关键技术,旨在为

weixin_34128237的博客 391

js模块化

js模块化 模块化分为三种方式: 第一种: CommonJS : // 导入 const moduleA = require(./moduleA); // 导出 module.exports = moduleA.someFunc; 第二种: AMD: // 定义一个模块 define(‘module’,[‘dep’],function(dep){ return exports; }); // 导入...

qrbd4558的博客 289

华为海思2026届数字IC秋招笔试高频考点解析与实战技巧(2025最新版)

本文深入解析华为海思2026届数字IC秋招笔试的高频考点与实战技巧,涵盖时序优化、低功耗设计、DFT规则等核心模块。针对2025年最新真题,提供详细的解题思路和工程经验,帮助考生高效备考。特别关注SystemVerilog约束随机测试等新增考点,助力考生在秋招笔试中脱颖而出。

m2n3o4p5的博客 415

Javascript模块详细介绍,一文理解Javascript!

模块就是实现特定功能的一组方法。只要把不同的函数(以及记录状态的变量)简单地放在一起,就算是一个模块。这种做法的缺点很明显:"污染"了全局变量,无法保证不与其他模块发生变量名冲突,而且模块成员之间看不出直接关系。

Saki_Python的博客 780

概述DeepLab系列(deeplab v1, deeplab v2, deeplab v3, deeplab v3+)

前言:图像分割是指像素级别的图像识别,即标注出图像中每个像素所属的对象类别。 语义分割更注重类别之间的区分,而实例分割更注重个体之间的区别。 DeepLab是由Google团队提出的一系列图像分割算法。 DeepLab v1 (2014年) Paper (ICLR 2015) Code 创新点: 空洞卷积(Atrous Conv); <解决编码过程中信号不断被下采样,细节丢失的问题> 全连接条件随机场(Fully-connected Conditional Random Field)。

ZSH12345678900的博客 5528

AI中台系统设计方案探讨

集成JupyterLab、低代码建模工具(如H2O.ai)、预训练模型库(Hugging Face、PaddleHub)。:通过REST/gRPC接口封装AI能力(如OCR、语音识别),支持流量控制与鉴权(如Kong、Apigee)。:服务注册发现(Consul)、熔断降级(Hystrix)、监控告警(Prometheus+Grafana)。:分布式存储(如HDFS、Ceph)与对象存储(如S3、OSS),支持海量数据高速读写。加密传输(TLS)、动态脱敏(如数据掩码)、访问控制(RBAC)。

reset2021的博客 1033

JavaScript前端5大模块化规范及其区别详解

JavaScript模块化发展与实践摘要 JavaScript模块化经历了从全局变量污染到标准化的发展过程。CommonJS采用同步加载机制,适合Node.js服务器环境,通过require/exports实现依赖管理。AMD规范(如RequireJS)专为浏览器设计,支持异步加载和显式依赖声明。CMD(如SeaJS)强调依赖就近原则,结合了同步/异步加载优势。UMD提供跨环境兼容方案,支持AMD、CommonJS和全局变量导出。ES6 Modules作为语言标准,支持静态分析和动态导入,成为现代开发的主流

油墨香^-^的博客 873

本地化搭建DeepSeek+RAGFlow,构建个人知识库

本地化搭建DeepSeek+RAGFlow,构建个人知识库。至少32G以上内存、500G以上空余磁盘空间。

gogospecter的专栏 7428

Javascript 模块化三种方案

Javascript 模块化主要有三种方案: 1、CommonJS// module add.js module.exports = function add (a, b) { return a + b; } // main.js var {add} = require(’./math’); // i hate sync console.log('1 + 2 = ’ + add(1,2); AM...

手牵手科技 1080

vscode中创建vue快捷键

1.安装Vetur插件(扩展里面直接搜) 2.vscode 界面里面左上角选则 文件=> 首选项=> 用户代码片段=>新建全局代码片段=>在输入框中新建名称为vue.json 3.删除里面的注释,当然你也可以留着,把下面的代码粘贴进去! { // Place your 全局 snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // descri

Leon_940002463的博客 3207

【算能】TPU 指令集架构深度解析

TPU指令集以领域专用性与数据流驱动为核心,通过精简指令集、硬件固化逻辑与高并行架构,实现张量计算的极致性能。开发者通常无需直接编写指令,但理解其设计原理对性能调优(如内存布局优化、指令调度)至关重要。算能TPU通过开放指令描述与编译器工具链,为垂直行业提供了更高灵活性的定制空间,而谷歌TPU则依赖编译器的全自动化优化,更适合大规模标准模型部署。未来,随着稀疏计算、光子计算等技术的引入,TPU指令集将进一步向高能效与高泛化性演进。

浩瀚之水的专栏 1183

js 模块化:ESM ,CJS, AMD, UMD

一般来说,一个文件就是一个模块,这个文件内的作用域唯一,可以向外暴露变量,函数等。模块化的出现减少了代码的繁琐,利于代码复用和日后维等作用。JavaScript的模块系统有ESM ,CJS, AMD, UMD。

Y7998的博客 2789

把 ABAP 采购订单增强做成一条可控流水线:BAdI ME_PROCESS_PO_CUST 全流程实战

摘要: SAP MM模块的ME_PROCESS_PO_CUST BAdI提供了采购订单全生命周期的增强点,覆盖从ME2*N事务到BAPI调用的各类场景。该接口通过INITIALIZE、OPEN、PROCESS_*系列方法、CHECK等组成完整处理流水线,支持字段控制、业务校验、数据派生等功能。关键注意事项包括:PROCESS_*方法仅在相关对象变更时触发、字段控制需区分参考键与动态规则、避免递归调用等。该BAdI采用面向对象设计,通过IF_PURCHASE_ORDER_*等接口操作采购单据对象,而非直接修改

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 404

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

在JavaScript中,常用的模块化规范有以下几种:CommonJS规范:主要用于服务器端编程,是Node.js采用的模块化规范。通过require方法加载模块,通过module.exports和export对象输出模块。AMD规范:主要用于浏览器端编程,是RequireJS采用的模块化规范。通过定义方。ES6模块规范:是ECMAScript 6采用的模块化规范,是JavaScript官方标准。通过export关键字输出模块,通过import。

青春木鱼的博客 2333

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

JavaScript模块化演进:从CommonJS到ES Module的全面解析

JavaScript模块化演进:从CommonJS到ES Module的全面解析

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 3984

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

JS中的几种模块化规范(CommonJS、AMD、CMD、ES6 Module)

引入问题:为什么要进行模块化? 1)模块化就是将系统分离成独立功能的模块,这样我们需要什么功能,就加载什么功能 2)模块化的好处: 避免命名空间的冲突(减少命名空间的污染) 更好的分离,实现按需加载 提高可代码的复用性 提高了代码的维护性 JS模块化大致发展过程 CommonJS(服务端)=》AMD(浏览器)=》CMD=》ES6 Module模块化 模块化规范的种类 模块化规范的发展趋势 终极:现代工具webpack webpack自己实现了一套模块机制,无论是CommonJs模块的require

Amelian的博客 3483

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

一文搞懂 JavaScript 模块化规范:CommonJS、AMD、CMD、ES6 Module

CommonJS是一个规范,最初提出来是在浏览器以外的地方使用,并且当时被命名为ServerJS,后来为了体现它的广泛性,修改为CommonJS,也可简称为CJS。● Node是CommonJS在服务器端一个具有代表性的实现;● Browserify是CommonJS在浏览器中的一种实现;● Node中对CommonJS进行了支持和实现,让我们在开发node的过程中可以方便的进行模块化开发,Node 应用由模块组成,采用 CommonJS 模块规范。每个文件就是一个模块,有自己的作用域。

qq_44919431的博客 1595

webpack使用CMD、AMD、CommonJS、ES6区别以及运用

之前在网上浏览器的webpack模块化很乱,而且也没有把CMD模块化使用讲清楚的,终于忍不下去,将几种模块化以一种清晰的方式写出来,这也是我一直想做的事,下面就来讲讲CMD、AMD、commonJs、es6模块化的运用。 CMD CMD是seaJs在推广过程中生产的对模块定义的规范 属于同步模块定义,在哪里需要用就在哪里引入, 用define定义 定义方法: define(function(){r.........

weixin_45288512的博客 3268

前端模块化——彻底搞懂AMD、CMD、ESM和CommonJS

我们知道,在NodeJS之前,由于没有过于复杂的开发场景,前端是不存在模块化的,后端才有模块化。NodeJS诞生之后,它使用CommonJS的模块化规范。从此,js模块化开始快速发展。 模块化的开发方式可以提供代码复用率,方便进行代码的管理。通常来说,一个文件就是一个模块,有自己的作用域,只向外暴露特定的变量和函数。目前流行的js模块化规范有CommonJS、AMD、CMD以及ES6的模块系统。下面开始一一介绍: CommonJS NodeJS是CommonJS规范的主要实践者,它有四个重要的环境变量

顺其自然~专栏 2508

再次梳理AMD、CMD、CommonJS、ES6 Module的区别

回想起上一次面试,第一轮面试官问我CMD和AMD的区别,我只回答说CMD是按需加载,AMD是提前加载,第二轮面试官又问了我CommonJs和ES6 Module的区别,emmm…,我回答说新的比旧的好~~,虽然面试官并没有说什么,不过显然这样的答案并不是有助于面试,有助于自己的积累的。 所以有必要进行一次梳理,能够更清晰的了解它们的优点及差异。 ...

雾空 1217

JS中的几种模块化规范(CommonJS、AMD、CMD、ES6 Module)(1)

有如下3中方式方式1-----分别暴露//引入与使用(结构引入):fun()方式2—统一暴露var m=1;//引入与使用(结构引入):fun()方式3----默认暴露//这里默认暴露对象//export default其实是导出一个叫做default的变量,所以其后面不能跟变量声明语句。//错误//正确m:1,fun(){//引入和使用(module为自定义任意名字)

2401_84097658的博客 824

JavaScript之模块化( AMD、CMD、CommonJs 、ES6)

JavaScript之模块化( AMD、CMD、CommonJs 、ES6)

在所有的事情背后,要有一颗坚定的的本心,要有一颗应对变革和提升自我的本心,世界瞬息万变,本心要坚持到底,保持学习,时刻复盘 1163

前端模块化-AMD、CMD、CommonJS和UMD、ESM

前端模块化的几种方式

cherry_na的专栏 1323

JS模块化——CommonJS AMD CMD UMD ES6 Module 比较

是服务器模块的规范,Node.js采用了这个规范。根据 CommonJS 规范,一个单独的文件就是一个模块,每一个模块都是一个单独的作用域,在一个文件定义的变量(还包括函数和类),都是私有的,对其他文件是不可见的。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。AMD = Asynchronous Module Definition,即 异步模块定义。AMD 规范加载模块是异步的,并允许函数回调,不必等到所有模块都加载完成,后续操作可以正常执行。AMD 中,使用 requi

希文Gershwin 894

对CommonJs和AMD,CMD的理解,AMD和CMD的区别,CommonJS与ES6的module的区别

对CommonJs和AMD,CMD的理解是为了使js代码模块化的规范,以前的时候如果一个js模块调用另一个模块,需要在html中进行link,而且必须有严格的引入顺序,但是这样又有可能造成阻塞,使页面失去响应。 CommonJS规定一个文件是一个模块,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,

qq1024884152的博客 1204
上一篇: 通过例子解释防抖和节流
下一篇: 事件循环:Promise与宏任务,微任务
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值