node.js中exports与module.exports的区别

作者 : 开心源码 本文共1692个字,预计阅读时间需要5分钟 发布时间: 2022-05-11 共59人阅读

node.js中,每个js文件都能当成一个板块,每个板块中,都隐含了一个名为module的对象,module对象中有一个exports属性,这个属性的功可以是将板块中的变量暴露给其余板块调使用。

console.log(typeof module)console.log(module)

结果:

objectModule {  id: '.',  exports: {},  parent: null,  ...}

当板块被引使用时,假如没有用exports暴露变量,其余板块就不可以用其数据。正所谓,你可以得到我的人,却得不到我的心…

13.js

require('./14')console.log(name)

14.js

let name = '叶文洁'

执行会报找不到name变量

?  01 [master] ? node 13.jsconsole.log(name)            ^ReferenceError: name is not defined

接下来我们用module.exports暴露变量

15.js

let moduleExports = require('./16')console.log(moduleExports)console.log(moduleExports.name)let name = '罗辑'moduleExports.introduce(name)

16.js

let name = '叶文洁'module.exports.name = namemodule.exports.introduce = function (name) {    console.log('请详情' + name + '的人物生平')}

运行结果:

?  01 [master] ? node 15.js{ name: '叶文洁', introduce: [Function] }叶文洁请详情罗辑的人物生平

以上的写法比较繁琐,每次要暴露变量,都需要写module.exports,在以懒惰为美德的程序员看来,这是不可以忍受的。因而node.js提供了一个变量exports作为module.exports的引使用

16.js也能写成:

let name = '叶文洁'// exports 是 module.exports 的引使用console.log(exports === module.exports) // trueexports.name = nameexports.introduce = function (name) {    console.log('请详情' + name + '的人物生平')}

接下来,问题来了,假如我们想将板块暴露的变量重新赋值呢?默认情况下,exports是一个对象,假设我们的需求是要得到一个字符串。要怎样弄?

也许你觉得这个很简单,直接给exports重新赋值即可以了。我们来试下:

17.js

let moduleExport = require('./18')console.log(moduleExport)

18.js

let name = '章北海'exports = name

执行结果:

?  01 [master] ? node 17.js{}

为何不是我们期待的结果?让我们将exports换为module.exports试下:

18.js

let name = '章北海'module.exports = name

结果:

?  01 [master] ? node 17.js章北海

既然exports === module.exports,那么为何修改exports不起作使用?

起因是,exportsmodule.exports的引使用,当exports被重新赋值时,并不会影响到module.exports的值,而板块返回的是module.exports,因此只有给module.exports重新赋值,才起作使用

同一个引使用

来个更复杂点的例子:

18.js

let name = '章北海'module.exports = nameexports = {}exports.age = 10module.exports = {}module.exports.skill = '隐蔽真实想法,一个真正的面壁者'

结果:

?  01 [master] ? node 17.js{ skill: '隐蔽真实想法,一个真正的面壁者' }

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » node.js中exports与module.exports的区别

发表回复