node.js中module.exports与exports用法上的区别

 更新时间:2016年09月02日 08:57:04   作者:爱可不可爱  
Node.js 引入了模块(Module)概念,一个模块可以通过module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本通过require() 函数引入并使用。那么node.js中module.exports与exports有什么区别呢?下面小编给大家解答下

 Node.js 引入了模块(Module)概念,一个模块可以通过module.exports 或 exports 将函数、变量等导出,以使其它 JavaScript 脚本通过require() 函数引入并使用。 

module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {},exports 是指向的 module.exports 的引用,在模块内部大概是这样:

exports = module.exports = {};

举个栗子,在node.js中创建模块非常简单,一个文件就是一个模块,所以我们创建一个name.js文件就创建了一个模块name.js,使用exports和require对象对外提供接口和引用模块。

name.js

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
exports.myName=myName;

这样在使用的时候需要这样

app.js

var name=require('./name');

如果我们创建的name.js文件是使用module.exports和require对象对外提供接口和引用模块。

name.js 

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
module.exports=myName;

app.js

var name=require('./name');

exports 赋值其实是给 module.exports 这个空对象添加myName属性而已,为什么exports要使用添加属性的方式,而不用exports=myName?

exports是引用 module.exports的值。exports 被改变的时候,module.exports不会被改变,而模块导出的时候,真正导出的执行是module.exports,而不是exports。

如果将name.js改为

var myName=function(){
var name='AmberYLopez';
console.log(name);
};
exports=myName;

app.js

var name=require('./name');<br>console.log(name);

运行会报错。因为,前面是通过给 exports 添加属性,而现在对 exports 指向的内存做了修改,exports 和 module.exports 不再指向同一块内存,即 module.exports 指向的那块内存并没有做任何改变,仍然为一个空对象 {},所以会报错。

相关文章

  • 利用Node.js对文件进行重命名

    利用Node.js对文件进行重命名

    最近工作中遇到了对文件进行重命名的需求,后通过node.js实现了,所以下面这篇文章主要给大家介绍了利用Node.js对文件进行重命名的相关资料,文中介绍的非常详细,对大家具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • NodeJS配置HTTPS服务实例分享

    NodeJS配置HTTPS服务实例分享

    本文给大家分享的是在nodejs中配置https服务的方法和具体的示例,非常的详细,有需要的小伙伴可以来参考下
    2017-02-02
  • NodeJs实现定时任务的示例代码

    NodeJs实现定时任务的示例代码

    本篇文章主要介绍了NodeJs实现定时任务的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • nodejs命令行参数处理模块commander使用实例

    nodejs命令行参数处理模块commander使用实例

    这篇文章主要介绍了nodejs命令行参数处理模块commander使用实例,commander是一个非常高大上的令行参数处理模块,需要的朋友可以参考下
    2014-09-09
  • 深入分析node.js的异步API和其局限性

    深入分析node.js的异步API和其局限性

    这篇文章首先给大家介绍了为什么要用异步API,其次node.js异步api在使用过程有一些什么样的限制呢,对于这个问题我们下面来看看这篇关于node.js异步的介绍分析吧,有需要的可以参考借鉴。
    2016-09-09
  • 测试驱动ChatGPT编程示例详解

    测试驱动ChatGPT编程示例详解

    这篇文章主要为大家介绍了测试驱动ChatGPT编程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • 从零学习node.js之mysql数据库的操作(五)

    从零学习node.js之mysql数据库的操作(五)

    因为接触Node.JS已经有一段时间了,最近粗略的研究了一下node.js操作数据库的包,觉得node.js连接数据库不错。下面这篇文章主要给大家介绍了node.js之mysql数据库操作的相关资料,需要的朋友可以参考下。
    2017-02-02
  • Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)

    Node.js中使用Log.io在浏览器中实时监控日志(等同tail -f命令)

    这篇文章主要介绍了Node.js中使用Log.io在浏览器中实时监控日志,Log.io等同于tail -f命令,但更强大,需要的朋友可以参考下
    2014-09-09
  • Node.js调用java之node-java问题

    Node.js调用java之node-java问题

    这篇文章主要介绍了Node.js调用java之node-java问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • NodeJS远程代码执行

    NodeJS远程代码执行

    这篇文章主要介绍了NodeJS远程代码执行方法的相关资料,需要的朋友可以参考下
    2016-08-08

最新评论