AMD模块规范

1.1 AMD规范说明

AMD规范专门用来实现浏览器端的模块化,并且模块的加载是异步的;引入一个第三方的require.js脚本用来解析AMD规范编写的模块

1.2 基本语法

使用define用来暴露模块,使用require用来引入模块

1.21暴露模块

(1)使用define(function(){})函数定义模块;并且向外暴露

// 定义一个没有依赖模块的data.js模块
define(function(){
let name = '过青年';
function getName(){
console.log(name);
return name;
}
// 暴露模块,推荐暴露对象
return {name,getName};
});

(2)使用define(['module','module2'],function(){})定义有依赖的模块,注意,数组里面的模块名只是一个代号,不一定要写模块名;不过推荐使用模块名作为代号,这样别人一看就知道引入了哪个模块,不用加后缀

// 定义一个有依赖模块的server.js模块
// 将依赖模块作为实参传递进去
define(['data'],function(data){
let age = 20;
function showName(){
console.log(data.name);
return name;
}
return {age,showName};
});
1.22引入模块

在主模块app.js中引入其他模块,使用require函数;需要使用require.config配置其他模块的路径

我们的路径是这样的

// app.js
(function(){
require.config({
// 以相对目录的方式指定一个基本路径
baseUrl:'./js/',
paths:{
// 以基本路径开始的相对路径
data:'./module/data',
server:'./module/server'
}
});
require(['server'],function(server){
//会将模块当作参数传进来
console.log(server.age); // 20
console.log(server.showName()); // 过青年
});
})()
  1. 我们从HTML开始解析页面

  2. HTML页面引入的require.js根据data-main属性发现主模块是js目录下的app.js

  3. 于是进入app.js页面进行解析;解析app.js页面,发现引入了一个叫server的模块,那么这个模块在哪里呢?通过app.js页面中的配置函数require.config()发现server这个模块在./js/module/server.js我们写路径的时候不能加上后缀,因为解析时默认会添加后缀

  4. 于是找到了这个模块,进入这个server模块,结果发现这个server模块又引入了一个叫data的模块,于是又通过app.js的配置函数找,发现data模块在./js/module/server.js中,于是加载这个模块

  5. 模块全部加载完成

1.23在HTML页面上使用模块化

AMD规范本来就是用来实现浏览器端的模块化的;而require.js脚本就是这个规范的一种实现

script脚本中的data-main属性值代表主模块,从主模块进入模块内部,依次加载其他模块的内容

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AMD规范实现</title>
</head>
<body>
<script src="./js/libs/require.min.js" data-main="./js/app.js"></script>
</body>
</html>

总结

  • 使用AMD规范需要引入require.js——第三方编写的脚本
  • 根据data-main确认主模块
  • 根据主模块中的require.config({ })函数确定各模块的位置
  • require.config({ })中各个模块的路径不能加后缀.js

03 AMD规范的基础使用详解的更多相关文章

  1. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  2. Nmap扫描教程之基础扫描详解

    Nmap扫描教程之基础扫描详解 Nmap扫描基础扫描 当用户对Nmap工具了解后,即可使用该工具实施扫描.通过上一章的介绍,用户可知Nmap工具可以分别对主机.端口.版本.操作系统等实施扫描.但是,在 ...

  3. ch01系统基础信息模块详解

    第1章 系统基础信息模块详解 1.1 系统性能信息模块 psutil 解决VMWare在Windows10的安装问题: 安装VC Redistributable 2017 解决虚拟机的上网问题:修改V ...

  4. I2C 基础原理详解

    今天来学习下I2C通信~ I2C(Inter-Intergrated Circuit)指的是 IC(Intergrated Circuit)之间的(Inter) 通信方式.如上图所以有很多的周边设备都 ...

  5. python 3.x 爬虫基础---Urllib详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 前言 爬虫也了解了一段时间了希望在半个月的时间内 ...

  6. RabbitMQ基础知识详解

    什么是MQ? MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法.MQ是消费-生产者模型的一个典型的代表,一端往消息队列中不断写入消息,而另一端则可以读取队列中 ...

  7. jmeter 基础功能详解

    jmeter 基础功能详解 thread group:包含一组线程,每个线程独立地执行测试计划. sampler:采样器,有多种不同的sample实现,用来发起各种请求,如http请求,jdbc请求, ...

  8. hadoop基础-SequenceFile详解

    hadoop基础-SequenceFile详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.SequenceFile简介 1>.什么是SequenceFile 序列文件 ...

  9. Cisco路由技术基础知识详解

    第一部分 请写出568A的线序(接触网络第一天就应该会的,只要你掐过,想都能想出来) .网卡MAC地址长度是(  )个二进制位(16进制与2进制的换算关系,只是换种方式问,不用你拿笔去算) A.12  ...

随机推荐

  1. 自由切换 网页上的 ico 图标

    自由切换 网页上的   ico   图标: 第一步:      进入这个网站 :https://www.uupoop.com/ico/?action=make 第二步:      进入网站后,然后选择 ...

  2. 729. My Calendar I

    原题链接:https://leetcode.com/problems/my-calendar-i/description/ 我的答案 虽然自己实现出来了,但是没看懂这道题目考查的是什么?编程语言的熟练 ...

  3. mysql事务的坑----MyISAM表类型不支持事务操作

    最近需要通过JDBC对数据库做事务型操作,实践时发现,并没有达到想要的效果,表现在:1.每次执行executeUpdate()后,数据就马上能在DB中查到.但按理来说,我还没执行commit(),DB ...

  4. Python实用笔记 (19)面向对象编程——访问限制

    在Class内部,可以有属性和方法,而外部代码可以通过直接调用实例变量的方法来操作数据,这样,就隐藏了内部的复杂逻辑. 但是,从前面Student类的定义来看,外部代码还是可以自由地修改一个实例的na ...

  5. C#/VB.NET 在PDF中添加文件包(Portfolio)

    PDF文件包(Portfolio)允许用户将多种不同类型的文件如Word.Excel.PDF.PowerPoint和图片等集合到一个PDF文件中,用户可以打开.更改PDF文件包中的单个文件.添加文件包 ...

  6. 一.django初识

    1.创建django项目:[vagrant@CentOS7 vagrant]$ django-admin startproject devops [vagrant@CentOS7 vagrant]$ ...

  7. node 模块正确暴露方法

    一个node模块,为了能够服用,就需要将其暴露,那么如何正确写呢?(参考:https://developer.mozilla.org/zh-CN/docs/Learn/Server-side/Expr ...

  8. efcore 跨表查询,实现一个接口内查询两个不同数据库里各自的表数据

    最近有efcore跨库查询的需求,研究了下colder框架里文档的分库实现,发现并不能完全实现一个接口下的跨库查询请求,只能满足一个业务层构造指定的唯一一个数据库访问接口. 先说下文档是怎么实现的 D ...

  9. 最小的K个数(剑指offer-29)

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4. 题目解析 大小为 K 的最小堆 复杂度:O(NlogK) + O(K ...

  10. WPF 精准大小的消息气泡生成

    在其他网站发布过,都是这里写的. 全部为Wpf方式,生成的气泡宽度高度较为精确. 适用任意字体以及字号,可设置图像字体.字号.行间距.字间距.阴影.气泡宽度等,在RichtextboxHelper.c ...