CommonJS 规范中的 modulemodule.exports 区别

Posted 山水一程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CommonJS 规范中的 modulemodule.exports 区别相关的知识,希望对你有一定的参考价值。

CommonJS 规范中的 module、module.exports 区别

CommonJS规范规定,每个模块内部,module变量代表当前模块。这个变量是一个对象,它的exports属性(即module.exports)是对外的接口。加载某个模块,其实是加载该模块的module.exports属性。
module.exports属性表示当前模块对外输出的接口,其他文件加载该模块,实际上就是读取module.exports变量。
为了方便,Node为每个模块提供一个exports变量,指向module.exports。这等同在每个模块头部,有一行这样的命令。

var exports = module.exports;

注意,不能直接将exports变量指向一个值,因为这样等于切断了exports与module.exports的联系。

exports.hello = function() {
  return ‘hello‘;
};

module.exports = ‘Hello world‘;

上面代码中,hello函数是无法对外输出的,因为module.exports被重新赋值了。
这意味着,如果一个模块的对外接口,就是一个单一的值,不能使用exports输出,只能使用module.exports输出。

何时确定模块的依赖关系,以及输入和输出的变量:

CommonJS 和 AMD 都只能在运行时确定这些东西,是“运行时加载”;
es6 编译时就可确定,是“编译时加载”或者静态加载。





以上是关于CommonJS 规范中的 modulemodule.exports 区别的主要内容,如果未能解决你的问题,请参考以下文章

CommonJs模块规范

Commonjs规范及Node模块实现

JS中的模块规范(CommonJS,AMD,CMD)

浅析JS中的模块规范(CommonJS,AMD,CMD) http://www.2cto.com/kf/201411/348276.html

AMD CMD 和 CommonJS

理解JS中的模块规范(CommonJS,AMD,CMD)