文章目录
  1. 1. CommonJS规范

CommonJS规范

上两篇博客中提到的AMD``CMD都是浏览器端的模块开发方案,而CommonJS是服务器端模块的规范,Node.js采用了这个规范。Node.JS首先采用了js模块化的概念。

根据CommonJS规范,一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性。

输出模块变量的最好方法是使用module.exports对象。

加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的module.exports对象(之前所用的exports其实是module.exports的一个引用,详情)。

1
2
3
4
5
6
7
8
9
var i = 0;
var max = 30;

module.exports = function () {
for (i; i++ < max; ) {
console.log(i);
}
max * = 1.1;
};

上面代码通过module.exports对象,定义了一个函数,该函数就是模块外部与内部通信的桥梁。
加载模块使用require方法,该方法读取一个文件并执行,最后返回文件内部的module.exports对象。

为什么CommonJS适用于服务器端呢?需要分析一下浏览器端的js和服务器端js都主要做了哪些事,有什么不同了:

1
2
3
4
5
6
7
--------------------------------服务器端JS   |    浏览器端JS-------------------------------

相同的代码需要多次执行 | 代码需要从一个服务器端分发到多个客户端执行

CPU和内存资源是瓶颈 | 带宽是瓶颈

加载时从磁盘中加载 | 加载时需要通过网络加载

CommonJS加载模块是同步的,所以只有加载完成才能执行后面的操作。像Node.js主要用于服务器的编程,加载的模块文件一般都已经存在本地硬盘,所以加载起来比较快,不用考虑异步加载的方式,所以CommonJS规范比较适用。但如果是浏览器环境,要从服务器加载模块,这时就必须采用异步模式。所以就有了 AMD CMD 解决方案。

不过,Node.js还没有看咧,待我学好了再来深入了解这个规范吧~~

文章目录
  1. 1. CommonJS规范