CommonJS 规范加载模块是同步的,即只有加载完成才能执行后面的操作。
模块规范
1、模块引用
使用require()方法,引入math模块,并赋值给变量math
var math=require('math');
注:命名的变量名和引入的模块名不必相同
路径
上面例子中require的参数仅仅是模块名字的字符串,没有带有路径,引用的是a.js所在当前目录下的node_modules目录下的math模块。如果当前目录没有node_modules目录或者node_modules目录里面没有安装math模块,便会报错。
如果要引入的模块在其他路径,就需要使用到相对路径或者绝对路径
var add=require('./add.js')
注:引入了当前目录下的add.js文件,并赋值给add变量
2、模块定义
- module对象:在每一个模块中,module对象代表该模块自身。
- export属性:module对象的一个属性,它向外提供接口。
假设上诉例子中add.js代码如下
function add(num1,num2){
alert(num1+num2);
}
尽管a.js文件引入了add.js文件,前者却仍然无法使用后者中的add函数,在a.js文件中add(3,5)这样的代码会报错,提示add不是一个函数。
add.js中的函数要能被其他模块使用,就需要暴露一个对外的接口,export属性用于完成这一工作。将add.js中代码改为如下
exports.add=function (num1,num2){
alert(num1+num2);
}
3、模块标识
模块标识指的是传递给require方法的参数,必须是符合小驼峰命名的字符串,或者以 . 、… 、开头的相对路径,或者绝对路径。
好处
- CommonJS模块规范很好地解决变量污染问题,每个模块具有独立空间,互不干扰,命名空间等方案与之相比相形见绌。
- CommonJS规范定义模块十分简单,接口十分简洁。
- CommonJS模块规范支持引入和导出功能,这样可以顺畅地连接各个模块,实现彼此间的依赖关系。