模块化开发(三)
文章目录
CommonJS规范
上两篇博客中提到的AMD``CMD
都是浏览器端的模块开发方案,而CommonJS
是服务器端模块的规范,Node.js
采用了这个规范。Node.JS首先采用了js模块化的概念。
根据CommonJS
规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global
对象的属性。
输出模块变量的最好方法是使用module.exports
对象。
加载模块使用require
方法,该方法读取一个文件并执行,最后返回文件内部的module.exports
对象(之前所用的exports其实是module.exports的一个引用,详情)。
1 | var i = 0; |
上面代码通过module.exports
对象,定义了一个函数,该函数就是模块外部与内部通信的桥梁。
加载模块使用require
方法,该方法读取一个文件并执行,最后返回文件内部的module.exports
对象。
为什么CommonJS
适用于服务器端呢?需要分析一下浏览器端的js和服务器端js都主要做了哪些事,有什么不同了:
1 | --------------------------------服务器端JS | 浏览器端JS------------------------------- |
CommonJS
加载模块是同步
的,所以只有加载完成才能执行后面的操作。像Node.js
主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS
规范比较适用。但如果是浏览器环境,要从服务器加载模块,这时就必须采用异步模式。所以就有了 AMD
CMD
解决方案。
不过,Node.js
还没有看咧,待我学好了再来深入了解这个规范吧~~