node.js - nodejs exports module.exports

【字号: 日期:2022-09-30浏览:29作者:雯心

问题描述

nodejs 中经常会看到这样的代码 exports = module.exports = {}请问 为什么要让 exports = module.exports 呢? 这样做有什么作用呢? 谢谢!!!

问题解答

回答1:

让这个模块更加纯粹的写法。module.exports是require()方法调用模块的接口,而exports可以给模块添加更多的方法,而exports返回的是一个实例化对象,指向module.exports比如对于一个构造函数来说:Person.js

var Person = function() { this.name = ’Samuel’;}//通过module.exportsmodule.exports = Person;//这里将Person作为模块暴露的接口,传递给require(),使其返回这个Personexports.one = ’Shervesi’;//这里给Person添加了一个属性,那么通过require()返回的模块也会拥有这个方法

Use.js

var P = require(’./Person’);console.log(P.name);//’Samuel’console.log(P.one);//’Shervesi’,这个属性是Person所不具有的

因此可以将exports理解为给模块进行最后修饰的方法;而module.exports则负责暴露一个接口供require()方法调用,若module.exports没有被声明指向,那它就默认的导出exports所指向的对象,如这样一个场景:Person.js

var Person = function() { this.name = ’Samuel’;}module.exports = ’I am a string’;//module.exports被声明指向了一个字符串exports.one = ’Shervesi’;

User.js

var P = require(’./Person.js’);console.log(P);//’I am a string’ //这是module.exports所提供的接口指向的console.log(P.one);//这里会出现类型错误,因为负责暴露接口的module.exports已经导出了一个字符串,即是一个常量,因此不能携带one属性,exports所修饰的one属性被‘干掉’。

总结:

module.exports是模块导出的仲裁,它决定到底导出一个什么东西,本质上就是提供给require()方法的一个返回值,因此它可以是任何js基本类型(包括null);

exports是给导出模块进行修饰的辅助方法,但受module.exports的仲裁,决定模块是否能具有这个属性。

相关文章: