当前文章数量: 555 篇, Author: 二师兄

CommonJS,AMD,CMD,UMD的关系(三)

2022-05-06 20:04

AMD

简称"“Asynchronous Module Definition”, 意思大概是"异步模块定义", 它采用异步的方式加载模块, 且只加载需要的模块. requireJS和curlJS是它的主要代表, 它也有两个主要关键字require,define

引入模块

AMD引入模块与CommonJS相同,都是用require关键字, 但他们的用法是不同的:

1
2
3
require(['aModule','bModule','cMdule'], function(aModule, bModule, cModule){
	//  使用模块
})

从案例上可以看到, require有两个主要参数, 参数1表示执行逻辑代码所需要依赖的模块列表, 参数2表示,当参数1中所有的模块后加载成功后的回调执行函数, 也就是说开发者在自己知道当前功能需要哪些依赖模块的时候, 就把他们定义好, requireJS会自动去引入这些模块再执行逻辑代码.

定义模块

开发AMD模块时, 必须使用define关键字, 比如:

1
2
3
4
5
6
define(function(){
	return {
    	a:1,
        add(){}
    }
})

return返回的值就是模块暴露出去的变量或属性, 在function内声明的变量或者函数都属于私有属性, 不能在模块外直接访问.

但是AMD模块规范有个明显的问题, 案例:

1
2
3
4
5
require(['aModule','bModule','cMdule'], function(aModule, bModule, cModule){
	if(false){
    	bModule.xxx();
    }
})

注意看这里,bModule在这段代码中, 并不是必需品, 它是只有在某些条件下才需要引入的模块, 如果不满足条件时, 是没有必要引入bModule的, 由此才又延伸出了CMD规范

目录