JavaScript模块化(三)AMD

JS & Node 模块化解释:AMD、UMD、CommonJS、 ESM AMD就是为了解决命名污染而研发的,同时还支持按需加载,是第一个引入模块化开发的规范插件,要想使用AMD语法得借助一款插件RequireJS。注意,AMD 只适用于浏览器,虽然也支持 Node,但不如 Node 自家的 CJS,后面会讲。CommonJS也常被称为CJS,与ADMI一样属于模块化语法,不过它是用来兼容后端Nodejs语言,庆幸的是,CJS在 Node.js 中已内置,开箱即用,无需引入插件。UMD是AMDCommonJS。 阅读详情

AMD(Asynchronous Module Definition)

介绍


AMD也是一个模块化的规范,它以require.js为基础,每个文件代表一个模块,与CommonJS不同的是,AMD是一个异步模块实现规范,且AMD更加侧重于浏览器,在运行时通过提前加载依赖,等到依赖加载完成再实现对应的方法来保证方法的正确实现。

require.js的语法


这里使用一个样例来说说语法
文件结构
在这里插入图片描述

define语法

没有依赖的模块
// module1.js
define(function() {
    let msg = 'module1';
    let getMsg = function() {
        return msg
    }
    return {
        getMsg
    }
});

在不依赖模块的时候,define传入一个参数,该参数为一个立即执行的方法,通过return可以将define内的变量,方法输出,而这些输出是作为着整个文件的输出

有依赖的模块
// module2.js
define(['module1'], function(m1) {
    let msg = 'module2';
    let showMsg = function() {
        console.log(msg, m1.getMsg());
    }
    return {
        showMsg
    }
})

在依赖模块的时候,define传入两个参数,第一个参数是要依赖的依赖数组,第二个参数是一个异步方法,当依赖数组中的依赖加载完成后,就会执行第二个参数的方法,同样地在这里通过return来输出,第二个参数的方法的参数对应了前面的模块数组中的模块,比如这里的m1就指向了module1

这里的依赖数组的字符串名需要通过顶部js文件requirejs.config来配置

requirejs.config({
    paths: {
        module1: './modules/module1',
        module2: './modules/module2'
    }
})

如果使用多个define输出,那只有第一个会真正地输出

requirejs语法

requirejs语法用在顶部文件,即页面最终引用的文件,只会依赖其他模块而不会输出,对应的模块路径也在这里配置

// main.js
requirejs.config({
    baseUrl:'js/', // 基本路径 出发点根目录,这里就是根目录下的js文件夹
    paths: { // 配置路径 默认会加上.js后缀,且不会判断是否已经有该后缀
        module1: './modules/module1',
        module2: './modules/module2'
    }
})
requirejs(['module2'], function(m2) {
    m2.showMsg()
})

这里将module1的模块名配置到根目录下的js文件(看baseUrl)下的modules的module1.js文件,module2也一样,这里注意不能写上.js后缀,在引用时会自动加上.js后缀,如果我们自己引用了就会出现下图的错误
在这里插入图片描述

因为main.js文件会自动引入其他模块,所以我们最终只需要引入main.js

按照官方文档的写法,在html中这么引入main.js

<script data-main="js/main.js" src="js/libs/require.js"></script>

在加载完require.js后加载data-main对应的文件

对第三方库的引用


使用AMD引入第三方库的时候,要考虑第三方库是否支持使用AMD,如jQuery中有一段代码

if ( typeof define === "function" && define.amd ) {
	define( "jquery", [], function() {
		return jQuery;
	} );
}

这段代码表示当我们使用AMD的时候,jQuery使用define以"jquery"为名输出了jQuery对象,所以我们在配置的时候要注意对jQuery要配置"jquery"

然而,并不是所有的第三方库都支持AMD,如angular,因此,我们在引用angular时,要按下面的配置方法来配置

requirejs.config({
    baseUrl:'js/',
    paths: { 
        module1: './modules/module1',
        module2: './modules/module2',
        angular: './libs/angular'
    },
    shim: {
        angular: {
            exports: 'angular' // 让angular.js使用'angular'为名输出
        }
    }
})

参考:require.js文档

JavaScript 模块化 了解了一下js模块化,简单记录一下。参考资料: JavaScript 模块化历程 前端模块化模块化发展历程 js一开始并没有模块化的概念,直到ajax被提出,前端能够像后端请求数据,前端逻辑越来越复杂,就出现了许多问题:全局变量,函数名冲突,依赖关系不好处理。 当时使用子执行函数来解决这些问题,比如经典的jquery就使用了匿名自执行函数封装代码,将他们全都挂载到全局变量jquery下 阅读详情

相关推荐

Javascript模块化编程系列三: CommonJS & AMD 模块化规范描述

CommonJS Module 规范     CommonJS 的模块化规范描述在Modules/1.1.1 中 目前实现此规格的包有: Yabble,CouchDB,Narwhal (0.2), Wakanda, TeaJS (formerly v8cgi), CommonScript, PINF JS Loader, SeaJS, ArangoDB,

oscar999的专栏 2765

国密sm2加密算法 前后端加密实现

国密sm2加密算法,前后端实现

阳光 4740

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

在现代 JavaScript 开发中,模块化是提升代码组织性和可维护性的关键。本文深入解析三种主流的模块化规范——CommonJS、AMD 和 ES6 Module。

Allen- 3479

requireJs | 在html中使用AMD规范

requireJs规范就是:在项目配置文件中配置好“js的路径”和“js文档中的函数模块的引用”,然后加载Html过程中就会根据配置好的路径和对应模块名称去加载代码,这样实现了js和HTML的分离,在另外的配置文档中管理js模块之间的依赖关系,这样有利于维护。 例如: 我们以d3.js和c3.js为例,c3是一个基于d3的图表绘图库,只要依次引入d3.js和c3.js即可使用它的api,现在我...

u011607490的博客 1758

真正国密SM2,SM3,SM4的前后台配套(js和java)加解密写法

之前网上找的资源都有问题,主要是SM2 JS用公钥加密,Java后台用私钥解不了,前后台不匹配,现已解决,前后台代码都共享出来,弄了好久,希望大家贡献一点积分(其中sm2Test.html的js路径引入不太 正确,修改后即可测试)

设置Solidworks导出文件的坐标系,stl坐标系平移

使用solidworks输出的模型坐标不再原点,怎么平行坐标系,这个方法很简单

weixin_45650767的博客 1万+

JS模块化加载方式 ,AMD、CMD、CommonJS、ES6四者间的异同

1、异同对比 2、四种模块化加载方式的详说 2.1 AMD AMD 是 RequireJS 在推广过程中对模块定义的规范化产出。 步骤如下: 1、引入require.js,并用data-main指定入口的js文件。 2、在入口的js文件内用require.config配制各个模块的路径。 3、define定义js模块文件 4、require引入js模块文件 注意: require([ ],callback)首先异步加载数组内的模块,随后才会去执行callback; 例子如下: index.html &

yiyueqinghui的博客 4832

避开SAM3安装大坑:手把手教你用国内镜像和Modelscope权重快速跑通Demo

本文详细介绍了如何在国内环境下快速部署SAM3视觉大模型,包括使用国内镜像加速Python包安装、通过Modelscope获取权重文件以及解决CUDA 11.8等低版本适配问题。手把手教你避开常见安装陷阱,实现高效Demo运行。

weixin_30642561的博客 1407

关于非node环境,纯jquery框架系统做国密加密

经研究查找开源类国密加密文件,现使用sm2+sm4源码地址 https://github.com/JuneAndGreen/sm-crypto/blob/master/dist/sm2.js。8.前端响应使用sm4密钥解密加密数据,获得真实传输数据信息。4.前端使用sm2公钥加密sm4密钥,获得密文。7.后端使用sm2私钥解密密文获得,sm4密钥。倘若前端没有使用$.ajax,而是使用的原生。网页测试sm2+sm4加解密demo。2.后端将sm2公钥传输到前端。5.使用sm4密钥加密数据。

weixin_48406290的博客 1210

告别玄学调试:手把手教你读懂全志芯片的sys_config.fex配置文件(以i2c配置为例)

本文深入解析全志芯片的sys_config.fex配置文件,以I2C设备驱动为例,详细讲解从引脚定义到驱动加载的全过程。通过实战案例和高级调试技巧,帮助开发者快速掌握硬件配置与内核驱动的联动机制,提升开发效率。

weixin_33737134的博客 418

【云原生技术】SonarQube 生态中PMD插件和P3C插件详细介绍

4. 在项目中如何选择 / 组合 1. 小团队、对《阿里规约》认同度高 → 直接启用 **P3C**,配合 SonarJava 基本够用。 2. 追求全面 Bug/安全检测 + 额外编码规范 → **SonarJava + PMD**(必要时加 P3C 少量规则)。 3. 大型多团队,希望“一本规约”统一风格 → **P3C 为主**,再补充 SonarJava/PMD 的 Bug 与安全规则。 4. 通过 Quality Gate 控制:将 **Blocker/Critical** Bug

weixin_46453070的博客 1366

JavaScript模块化开发(三) —— AMD规范

本文转载自原地址,感谢Feeldesign Studio的无私分享! 本文介绍一下AMD规范(注意,这里的AMD和做cpu的AMD可不是一回事)。 根据之前文章的知识,我们知道一个模块系统最起码要有下面这些功能: 可以创建封装的模块 可以定义对其他模块的依赖 可以导出功能,被其他模块使用 AMD是“Asynchronous Module Definition”的缩写,意思就是“异步...

Sam 206

U盘插入电脑时发出声音但不显示——编程解决方案

以上是一些常见的编程解决方案,帮助您解决U盘插入电脑时发出声音但不显示的问题。请注意,这些解决方案可能因不同的情况而略有不同,因此请根据您的具体情况进行调整和尝试。当您将U盘插入电脑时,如果您听到了连接声音,但是U盘却没有在文件资源管理器或桌面上显示出来,这可能是由于一些常见问题导致的。U盘的文件系统格式可能与您的计算机不兼容,导致无法正确识别。如果输出显示U盘的文件系统格式与您的计算机不兼容,您可以尝试重新格式化U盘或使用其他兼容的文件系统格式。其中,X是U盘的磁盘编号,Y是您想要分配给U盘的盘符。

ByteEchoX的博客 2463

JS模块化(三)AMD(Asynchronous Module Definition)的应用

JS模块化(三)AMD(Asynchronous Module Definition)的应用 基本使用 暴露出去 // 定义没有依赖的模块 define(function(){ return 模块 }) // 定义有依赖的模块 define(['module1','module2'],function(m1,m2){ return 模块 }) 应用进来 requirejs(['m...

Z_hao_nan的博客 512

vue2/3 - 详细实现内网使用离线高德地图功能,在vue中无需网络离线使用高德地图相关功能,高德地图如何离线加载详细教程(内网部署及使用),提供最新完整的瓦片资源下载及相关工具(示例代码,一键复制

vue,vue2,vue3,高德地图,离线使用高德地图,高德地图瓦片官方下载,vue内网使用高德地图离线无网络,断网情况下使用高德地图,vue离线高德地图教程,如何实现内网部署高德地图,无需联网离线使用,vue+ts实现离线高德地图 内网离线高德地图,如何在高德地图Vue项目中下载离线地图,高德离线地图加载不出来,高德地图离线使用不显示怎么办,怎么解决vue内网使用离线高德地图加载失败问题,vue实现离线地图+高德瓦片,vue引入高德离线地图,vue项目如何使用离线高德地图和自定义地图样式,高德离线地图的下

✅ 精选推荐文章 1万+

【DaVinci Developer专题】-8-创建一个枚举Enum ADT(Application Data Type)

目录 1 创建一个枚举Value ADT(Application Data Type) 1.1 命名application data type 1.2 创建一个computation method计算方法属性 1.3 创建一个Contraint约束条件属性 2 创建了一个新的Type Mapping Sets 3 创建了一个S/R Port Interface 4 SWC引用Type Mapping set 5 导入CFG生成代码的总结 6 结尾 <--返回「实战篇」博文-总目录-

「汽车电子助手」的博客 2292

前端模块化

前端项目越来越大,应对前端工程化,我们应该怎么做,由以下三个方面的改变。 思维上:使用模块化思想 工具上:webpack,npm等模块化工具 工作方式上:多人协作 那了解模块化规范是必不可少的 1.Common.js CommonJS模块的特点如下。 所有代码都运行在模块作用域,不会污染全局作用域。 模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加...

铭小小 202

软考高级网络规划设计师教程(第3版)

"本书是由工业和信息化部教育与考试中心组织编写的考试用书,依据《网络规划设计师考试大纲》(2026年审定通过)编写。本书分为两篇:第一篇为网络规划与设计综合知识,其中第1章介绍计算机网络基础知识,第2章介绍网络互连与互联网,第3章介绍网络规划与设计的知识和方法,第4章介绍网络资源设备,第5章介绍网络安全技术,第6章介绍标准化和网络安全法规;第二篇为案例实践,其中第7章介绍网络规划案例,第8章介绍网络故障分析与处理案例,第9章介绍网络安全部署案例,第10章介绍网络规划与设计论文写作的指导思想和写作技巧。

鹿鸣天涯 3942

Aria2GUI 如何配置断点续传与并发下载:实用完整指南

这篇文章写给刚装好 Aria2GUI 的读者,讲清楚三件事:大文件下载中断后如何不从头再来、一次粘贴大量下载链接后怎么控制同时跑多少、改完配置去哪里生效。读完之后,你可以按自己的网络和磁盘环境配置断点续传、并发下载与批量导入流程,并掌握日常启动和重启下载服务的方法。 ## 📁 先找到入口:配置文件与会话文件在哪 Aria2GUI 装好后,核心其实是它自带的 aria2c,界面只是一个通过 J

gitblog_00590的博客 800

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

JS模块化深度解析

JavaScript模块化演进:从解决全局污染问题到标准化ES6模块的发展历程。文章介绍了CommonJS、AMD和ES6 Modules三种主要方案的使用方法及区别,强调模块化在命名冲突解决、依赖管理、代码复用等方面的优势。最佳实践部分提出单一职责、明确接口等原则,并对比不同方案的适用场景。随着ES6成为标准,配合Webpack等工具,模块化已成为构建可维护大型应用的基础,体现了软件工程关注点分离的核心思想。

leohu0723的博客 438

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

javascript模块化之CommonJS、AMD、CMD、UMD、ES6

这是一篇关于js模块化编程的总结记录 javascript模块化之CommonJS、AMD、CMD、UMD、ES6

皖林的博客 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JS模块化——AMD、CommonJS和ESModules

在模块化概念出现之前,JS 的脚本通常是通过 script 标签直接嵌入 HTML 中的,但是不同 js 文件里申明的变量都会存在于全局作用域中。不同的开发者维护不同的 js 文件,很难保证不和其它 js 文件冲突。全局变量污染开始成为开发者的噩梦。AMD是"Asynchronous Module Definition",意思就是"异步模块定义"。它采用异步方式加载模块,模块的加载不影响它后面语句的运行。所有依赖这个模块的语句,都定义在一个回调函数中,等到加载完成之后,这个回调函数才会运行。

cherry__yu的博客 2222

JavaScript模块化:CommonJS、AMD与ES模块化

CommonJS主要用于服务器端,同步加载模块,适用于Node.js。它的优势在于简单易用,但在浏览器端可能导致页面阻塞。AMD主要用于浏览器端,异步加载模块,避免页面阻塞。它的优势在于适用于大型Web应用程序,但语法相对繁琐。ES模块化是最新的模块化标准,适用于服务器端和浏览器端,具有更好的语法和功能。它的优势在于静态加载、编译时检查和更简洁的语法,但需要浏览器或运行时的支持。在实际项目中,可以根据具体需求和场景选择合适的模块化规范。例如,对于Node.js项目,可以使用CommonJS;

NolanKy 的 技术博客 1512

Javascript模块化规范之CommonJs,AMD,CMD

Javascript的模块化编程;AMD、CMD、CommonJs、ES6的对比

weixin_43862492的博客 3646

JS模块化规范之AMD

JS模块化规范之AMD

weixin_45364386的博客 1622
上一篇: JavaScript模块化(五)各种规范的比较CommonJS,AMD,CMD,ES Module
下一篇: weex create报错Error: Cannot find module 'metalsmith'
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值