commonjs 规范
CommonJS :
1 .了解
node应用由模块组成,采用的commonjs模块规范。**每一个文件就是一个模块,拥有自己独立的作用域,变量,以及方法等,对其他的模块都不可见。**CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。**加载某个模块,其实是加载该模块的module.exports属性。**require方法用于加载模块。
CommonJS模块的特点
1.所有代码都运行在模块作用域,不会污染全局作用域。
2.模块可以多次加载,但是只会在第一次加载时运行一次,然后运行结果就被缓存了,以后再加载,就直接读取缓存结果。要想让模块再次运行,必须清除缓存。
3.模块加载的顺序,按照其在代码中出现的顺序。
2.module对象
1.module.exports属性
module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
2.exports变量
node为每一个模块提供了一个exports变量(可以说是一个对象),指向 module.exports。这相当于每个模块中都有一句这样的命令 const exports = module.exports;
这样,在对外输出时,可以在这个变量上添加方法。例如
exports.add = function (r){
return Math.PI * r *r
};
注意:不能把exports直接指向一个值,这样就相当于切断了 exports 和module.exports 的关系。例如
exports=function(x){
console.log(x)
};
一个模块的对外接口,就是一个单一的值,不能使用exports输出,必须使用 module.exports输出。
module.exports=function(x){
console.log(x);
};
为服务器提供的一种模块形式的优化
CommonJS模块建议指定一个简单的用于声明模块服务器端的API,并且不像AMD那样尝试去广泛的操心诸如io,文件系统,约定以及更多的一揽子问题。
这种形式为CommonJS所建议–它是一个把目标定在设计,原型化和标准化Javascript API的自愿者工作组。迄今为止,他们已经在模块和包方面做出了批复标准的尝试。