nodejs中使用exports与module.exports进行模块导出

您所在的位置:网站首页 js文件导出函数 nodejs中使用exports与module.exports进行模块导出

nodejs中使用exports与module.exports进行模块导出

2024-07-13 21:49| 来源: 网络整理| 查看: 265

关于nodejs

nodejs是JavaScript的运行时环境,它既不是语言也不是框架。nodejs是后台开发的一个工具。 前端开发的JavaScript:

ES语法DOMBOM

nodejs中JavaScript:

ES语法没有BOM和DOM nodejs中的模块导出 module.exports

示例1:通常我们使用module.exports进行单个成员的导出,例如:

//在文件a.js中 var foo = 'helloWorld' module.exports = foo

在另一个文件中通过require加载该模块,可以得到导出的成员

//同目录下的b.js中加载 a模块 var a = require('./a.js') //输出 console.log(a) //输出helloWorld

当然多个成员导出也能使用module.exports,这里我提供了两种方式

示例2:用module.exports挂载成员进行导出,例如: var foo='helloWorld' var msg='123' //将两个成员作为module.exports的成员进行挂载 module.exports.foo=foo module.exports.msg=msg

在b.js中加载a.js模块

var a=require('./a.js') console.log(a) //得到module.exports对象,有两个成员msg和foo 示例3:module.exports直接导出对象 var foo='helloWorld' var msg='123' var msgs='111' module.exports={ foo:foo, msg:msg, msgs:msgs, }

在b.js中可以的含有这三个属性的对象。

解析

在模块加载的方法require中最终都会返回一个对象,它就是module.exports,所以加载的模块导出的成员都在module.exports中。 在示例1中,只导出一个成员,这其中module.exports实际上改变了指向,其指向大概如下图: ! 而示例2采用挂载方式导出多个成员,示意如下: 在这里插入图片描述 示例3使用module.exports直接对象导出多个成员,这其实与示例类似

在这里插入图片描述

使用exports

exports实际上是module.export的引用,这也是为简化开发人的代码而提出的。

示例4:使用exports多个成员导出 var foo='helloWorld' var msg='123' var msgs='111' //导出多个成员,实际与示例2相似 exports.foo=foo exports.msg=msg exports.msgs=msgs

在b.js中加载可以得到包含这些导出成员的对象

示例5:那是否可以用示例3或者示例1的方式导出成员呢?因为前文解释了示例1和示例3的原理是一样的,这里我用示例5验证我们疑问 var foo='helloWorld' var msg='123' var msgs='111' //使用exports直接导出对象 exports={ foo:foo, msg:msg, msgs:msgs }

这是我们在b.js中加载a.js模块,只能得到一个空对象,说明成员导出失败!

解析

前文我们提到了exports只是module.exports的一个引用,即它们指向同一块内存,当我们将exports指向一个新的内存地址时,它已经和module.exports没有任何关系了所以无法正常导出成员。 图示: 在这里插入图片描述 当exports改变指向时, 在这里插入图片描述

总结

本文解析了module.exports与exports的不同,实际上exports是module.exports的一个引用,当exports改变指向时,它就断绝了module.exports的关联,不会影响导出成员,所以之后无论怎么在exports上挂载成员也无法导出成员!因为在加载模块中使用的require方法会返回一个module.exports对象。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3