请牢记一条原则:无论使用 exports 暴露成员,或是 module.exports 暴露成员,最终暴露的结果,都是以 module.exports 所指向的对象为准。

1.module 对象

看一下 module对象长什么样子
exports显示是未定义的undefined

1.module.exports 和exports 是commonjs的规范

2.export 和export default 是es6 规范

3.require 是amd规范引入方式

4.import 是es6 的一个语法标准

2.module.exports 和 exports 的联系

  • 在 module 对象中,包含 exports 属性,而我们就是通过这个属性(module.exports),向外暴露(共享)成员的。
  • exports 是 node 为了简化向外共享成员的代码,提供的一个新方式,在默认情况下,exports 和 module.exports 指向的是同一个对象(为了不混淆,你可以理解为 exports 是 module.exports 对象地址的一个引用,exports 本质是一个变量)

3.module.exports 和 exports 的区别

  • 两者没有区别,是全等的

4.module.exports 和 exports 的使用注意点(略长,但是认真看完,理解一下就懂了)

一、不恰当的使用方法:exports = xxx;

论述4.1
  1. 在使用 module.exports 时,我们可以将某一个对象赋值给 module.exports(module.exports = Object),也可以为 module.exports 挂载新属性( module.exports.name = ‘zs’),这些都没有问题,你都可以在引用的文件中拿到修改后的模块成员(module.exports 所指的对象)。
  2. 但是,如果你将某一对象或某一变量直接赋值给了 exports(例如:const project = ‘张三’; exports = project; ),那么你在引用的文件中只能拿到一个 {}。
  3. 原因是因为 exports 在默认情况下是指向 module.exports 对象的引用,如果为 exports 赋值了,那么也就是说 exports 不再指向 module.exports 所指的对象的地址,而我们向外共享成员的最终结果是 module.exports 所指的对象,如此便会导致错误。

定义两个文件做一个代码展示和说明:

//test.js
const object = { na: "name", age: 18 }
exports = object;
//main.js
const ex = require("./test")
console.log("ex", ex);

打印的结果是:这里显示是一个空的对象里面是什么都没有的

4.2 重要结论:module.exports 和 exports 同指一个对象,但是最终暴露结果以 module.exports 的为准,上面的代码中,exports 改变了指向,而我们又没有为 module.exports 挂载任何的属性或方法,所以就拿到了空对象。
画图举例:

刚开始 module.exports 和 exports 指向同一个对象

然后 exports 指向了一个新对象

但我们向外暴露时,是以 module.exports 为标准的,也就是向外暴露的是上图中的“原对象”,而不是“新对象”,在上述代码中,我们没有对原对象做任何操作,原对象是没有值的,所以我们导入了 exports.js 之后,得到的是一个空对象。

exports和module.exports的区别相关推荐

  1. node.js中exports与module.exports的区别分析

    前言 关于Node.js中的exports和module.exports,很多时候都比较容易让人混淆,弄不清楚两者间的区别.那么我们就从头开始理清这两者之间的关系. 来源 在开发Node.js应用的时 ...

  2. Node.js: exports 和 module.exports 的区别

    我理解的exports 和 module.exports 的区别,欢迎大家吐槽~ 为了更好的理解 exports 和 module.exports 的关系,我们先来补点 js 基础.示例: app.j ...

  3. Node.js 中 exports 和 module.exports 的区别

    每一个模块中都有一个 module 对象, module 对象中有一个 exports 对象 我们可以把需要导出的成员都放到 module.exports 这个接口对象中,也就是 module.exp ...

  4. exports 和 module.exports 的区别

    首先我们需要知道的是,node 真正导出的对象是 module.exports 那exports 又是怎么回事呢? 其实,在一开始,exports 和 module.exports 引用的都是同一个 ...

  5. Nodejs的exports与module.exports的区别

    先建两个文件 index.js util.js 在util.js 写一些内容 exports.hello = 'www';exports.add = function (a,v) {return a ...

  6. nodeJS学习(9)--- nodeJS模块:exports vs module.exports

    模块简介: 通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ 这些核心模块被编译成二进制文件,可以 require('模块名') ...

  7. 一文解读exports、module.exports 和 export、export default

    对于前端初学者来说,exports.module.exports 和 export.export default 容易让人产生误解,笔者顺便写篇文章解读一下. 第一部分:exports 和 modul ...

  8. exports 和 module.exports

    (1)exports和module.exports的作用都是将文件模块里面的方法和属性暴露给require返回的对象进行调用,区别就是exports暴露的方法和属性都可以被module.exports ...

  9. nodejs中的exports和module.exports

    module是随文件而生的全局变量,它有exports属性,这个属性默认是一个空的字典. node的设计者画蛇添足有定义了一个exports全局变量,export指向module.exports所指向 ...

最新文章

  1. 安装mysql和memcached
  2. 【后缀自动机】SPOJ 1812-LCSII
  3. MYSQL5.5 YUM更新安装
  4. 【计算机网络】HTTP 与 HTTPS ( HTTP 在网络各个层级的传输过程 | HTTPS 工作流程 | HTTPS 弊端 )
  5. MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎
  6. 【大会】AI能解决哪些问题?
  7. 支付宝备用金七天不还会不会上征信?
  8. c# 指定打开某个路径下的CMD_【自学C#】|| 笔记 25 文件的操作
  9. 安卓开发仿微信图片拖拽_Android 仿微信朋友圈图片拖拽返回
  10. Box2dの学习制作超级积木完整版
  11. Codeforces Round #595 (Div. 3) E. By Elevator or Stairs?
  12. 2014年9月-前端开发月刊
  13. uni-app开发经验分享十五: uni-app 蓝牙打印功能
  14. 五、 线性判别分析 LDA
  15. 我的世界服务器显示空岛等级,mc空岛每种方块等级 | 手游网游页游攻略大全
  16. 写给迷茫中的程序员兄弟:如何打造最快的职场晋升神话
  17. 2020 3 PLC PON
  18. php 匿名函数 递归,匿名函数,lambda_C++ lambda 递归调用,匿名函数,lambda,c++ - phpStudy...
  19. 作为开篇文章,我们聊聊“围城”
  20. atan 和 atan2

热门文章

  1. 温暖我的瞬间|榜样的力量
  2. 辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位上的数字都是如此。例如,如果里程表显示33
  3. 千锋网络安全学习笔记部分3
  4. Windows10配置Java环境变量
  5. “前线”与“后方”—数字化转型时代理解华为品质服务的价值
  6. 设计模式之六大设计原则
  7. 树莓派4B安装ubuntu20操作系统以及网络问题
  8. hadoop集群搭建出现的一些问题总结
  9. vscode提示 拓展主机在过去5分钟内意外终止了3次问题解决...
  10. 同事对支付宝的评价 及VISA