一、CommonJS
CommonJS就是为js的表现指定的规范,nodeJS是这一规范的其中一种实现。因为js没有模块的功能所以CommonJS应运而生,它希望js可以在任何地方运行,不只是浏览器。
node,commonJS,浏览器以及W3C之间有什么关系:
CommonJS定义的模块分为:
- 模块引用:require
- 模块定义:exports
- 模块标识:module
require()用来引入外部模块;exports对象用于导出当前模块的方法或变量,唯一的导出口;module对象就代表模块本身。
二、AMD
CommonJS是主要为了js在后端的表现指定的,他是不适合前端的,为什么这么说呢?因为服务器端js的执行大多依赖服务器系统的本地资源(如:CPU、内存、磁盘),而浏览器端js大部分依赖于网络。于是,AMD(异步模块定义)出现了,它主要就是为前端js的表现指定规范。
AMD就只有一个接口:define
RequireJS就是这一规范的实现,以下是requireJS定义模块的代码:
define(['jquery', 'otherModule'], function($, otherModule) {
var $select = $('#select');
});
如果没有什么依赖,下面这样写也可以:
define(function() {
console.log('hello world');
});
三、CMD
大牛玉伯写的seaJS就是遵循CMD规范的实现,与AMD不同的是,他采用的是按需加载模块的思想,这在移动端用的比较多,因为它比AMD加载方式更节约流量。