CommonJS规范与AMD规范

CommonJS模块的特点如下:
所有代码都运行在模块作用域,不会污染全局作用域。
模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
模块加载的顺序,按照其在代码中出现的顺序。
CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。

require方法用于加载模块。
module对象:Node内部提供一个Module构建函数。所有模块都是Module的实例,每个模块内部,都有一个module对象,代表当前模块
例如:function Module(id, parent) {
this.id = id;//模块的识别符,通常是带有绝对路径的模块文件名。
this.exports = {};//module.exports 表示模块对外输出的值。
this.parent = parent;//返回一个对象,表示调用该模块的模块。module.children 返回一个数组,表示该模块要用到的其他模块。
// ...}
module.exports属性:表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
exports变量:Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。
var exports = module.exports;在对外输出模块接口时,可以向exports对象添加方法。
注意:如果一个模块的对外接口,就是一个单一的值,不能使用exports输出,只能使用module.exports输出
AMD规范与CommonJS规范的兼容性:
CommonJS规范加载模块是同步的,只有加载完成,才能执行后面的操作,AMD规范则是非同步加载模块,允许指定回调函数。
由于Node.js主要用于服务器编程,加载起来较快,不用考虑非同步加载方式,CommonJS规范比较适用。而浏览器环境,从服务器端加载模块一般采用AMD规范。
AMD规范使用define方法定义模块,CommonJS模块规范,内置的require命令用于加载模块文件。

posted @ 2020-12-07 15:17  然然初心未改  阅读(223)  评论(0编辑  收藏  举报