博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AMD:异步模块定义
阅读量:5936 次
发布时间:2019-06-19

本文共 1702 字,大约阅读时间需要 5 分钟。

提到,为实现与Node.js相同方式的模块写法,大牛们做了很多努力。

 

但浏览器环境不同于服务器端,它的模块有一个HTTP请求过程(而Node.js的模块文件就在本地),这个请求过程多数使用script tag,script 默认的异步性导致很难实现与Node.js一模一样的模块格式。

 

 使得实现变为现实。虽然和Node.js的模块写法不完全一致,但也有很多相似之处,使得熟悉Node.js的程序员有一些亲切感。

 

但Node.js终究是服务器端的JavaScript,没有必要把这些条条框框放到浏览器JavaScript环境中。

 

这时 诞生了,它的全称为异步模块定义。从名称上看便知它是适合script tag的。也可以说AMD是专门为浏览器中JavaScript环境设计的规范。它吸取了CommonJS的一些优点,但又不照搬它的格式。开始AMD作为CommonJS的 存在,因无法与CommonJS开发者达成一致而独立出来。它有自己的 和 。

 

AMD设计出一个简洁的写模块API:

define(id?, dependencies?, factory);

 

其中:

  • id: 模块标识,可以省略。
  • dependencies: 所依赖的模块,可以省略。
  • factory: 模块的实现,或者一个JavaScript对象。
id遵循CommonJS  。dependencies元素的顺序和factory参数一一对应。
 
以下是使用AMD模式开发的简单三层结构(基础库/UI层/应用层):
 
base.js
1
2
3
4
5
6
define(function() {
    return {
        mix: function(source, target) {
        }
    };
});

 

ui.js

1
2
3
4
5
6
7
define(['base'], function(base) {
    return {
        show: function() {
            // todo with module base
        }
    }
});

 

page.js

1
2
3
define(['data', 'ui'], function(data, ui) {
    // init here
});

 

data.js

1
2
3
4
define({
    users: [],
    members: []
});

 

以上同时演示了define的三种用法,
1,定义无依赖的模块(base.js)
2,定义有依赖的模块(ui.js,page.js)
3,定义数据对象模块(data.js)
 
 
细心的会发现,还有一种没有出现,即具名模块
 
4,具名模块
1
2
3
define('index', ['data','base'], function(data, base) {
    // todo
});

 

具名模块多数时候是不推荐的,一般由打包工具合并多个模块到一个js文件中时使用。
 
前面提到dependencies元素的顺序和factory一一对应,其实不太严谨。AMD开始为摆脱CommonJS的束缚,开创性的提出了自己的模块风格。但后来又做了妥协,兼容了 CommonJS  。即又可以这样写
 
5,包装模块
1
2
3
4
5
6
define(function(require, exports, module) {
    var base = require('base');
    exports.show = function() {
        // todo with module base
    }
});

 

不考虑多了一层函数外,格式和Node.js是一样的。使用require获取依赖模块,使用exports导出API。
 
除了define外,AMD还保留一个关键字require。 作为规范保留的全局标识符,可以实现为 module loader。也可以不实现。
 
目前,实现AMD的库有 、 、 、、 、 等。
也有很多库支持AMD规范,即将自己作为一个模块存在,如 、 、 、  甚至还有  。
 
 
相关:

转载于:https://www.cnblogs.com/mrxia/p/3594519.html

你可能感兴趣的文章
web安全问题分析与防御总结
查看>>
React 组件通信之 React context
查看>>
ZooKeeper 可视化监控 zkui
查看>>
Linux下通过配置Crontab实现进程守护
查看>>
ios 打包上传Appstore 时报的错误 90101 90149
查看>>
Oracle推出轻量级Java微服务框架Helidon
查看>>
密码概述
查看>>
nagios+nrpe监控配置错误日志集
查看>>
autoconf,automake,libtool
查看>>
jQuery的技巧01
查看>>
基于泛型实现的ibatis通用分页查询
查看>>
gopacket 使用
查看>>
AlertDialog对话框
查看>>
我的友情链接
查看>>
办公室几台电脑怎么连一台打印机的具体步骤
查看>>
linux安全---cacti+ntop监控
查看>>
鸟哥的linux私房菜-shell简单学习-1
查看>>
nagios配置监控的一些思路和工作流程
查看>>
通讯组基本管理任务三
查看>>
赫夫曼编码实现
查看>>