JS模块化开发规范
commonJS规范
Nodejs模块系统遵循此规范,适用于服务端
1、 规范定义
CommonJS规范规定,一个文件就是一个模块,用module变量代表当前模块。 Node在其内部提供一个Module的构建函数。所有模块都是Module的实例;
一个单独的文件就是一个模块。每一个模块都是一个单独的作用域,也就是说,在该模块内部定义的变量,无法被其他模块读取,除非定义为global对象的属性;
2、 module.exports属性定义模块
module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量
例子:
//moduleA.js
module.exports.funcA= function(){
console.log(‘This is moduleA!’);
}
3、模块引用
require函数的基本功能是,读入并执行一个JavaScript文件,然后返回该模块的exports对象。在moduleB模块中加载引入moduleA模块,便可以使用funA方法了,示例代码如下:
特点:
- 每个文件都是一个module实例
- 文件内通过require对象引入指定模块
- 所有文件加载均是同步完成
- 通过module关键字暴露内容
- 每个模块加载一次之后就会被缓存
AMD规范
RequireJs JS模块加载器遵循此规范,适用于浏览器)
·1、定义模块:
define方法 define(id?, [deps,]?, factory);
解析参数:
-
第一个参数,id(名字),是个字符串。它指的是定义中模块的名字,这个参数是可选的。如果没有提供该参数,模块的名字应该默认为模块加载器请求的指定脚本的名字。如果提供了该参数,模块名必须是“顶级”的和绝对的(不允许相对名字)。
-
第二个参数,dependencies(依赖),是个定义中模块所依赖模块的数组。依赖模块必须根据模块的工厂方法优先级执行,并且执行的结果应该按照依赖数组中的位置顺序以参数的形式传入(定义中模块的)工厂方法中。
-
第三个参数,factory(工厂方法),为模块初始化要执行的函数或对象。如果为函数,它应该只被执行一次。如果是对象,此对象应该为模块的输出值
-
2、require方法:加载模块require([module], callback);
CMD规范
他是seaJS 模块加载器
-
规范定义: CMD是国内大牛玉伯在开发SeaJS的时候提出来的,属于CommonJS的一种规范,根据浏览器的异步环境做了自己的实现。它和 AMD 很相似,尽量保持简单,并与 CommonJS 和 Node.js 的 Modules 规范保持了很大的兼容性
-
-define方法:定义模块
efine( id?, [deps,]?, factory ); 前两个参数项可选
define(‘hello’, [‘jquery’], function(require, exports, module) {
// 模块代码});
- require方法:加载模块