exports和module.exports的区别
请牢记一条原则:无论使用 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
- 在使用 module.exports 时,我们可以将某一个对象赋值给 module.exports(module.exports = Object),也可以为 module.exports 挂载新属性( module.exports.name = ‘zs’),这些都没有问题,你都可以在引用的文件中拿到修改后的模块成员(module.exports 所指的对象)。
- 但是,如果你将某一对象或某一变量直接赋值给了 exports(例如:const project = ‘张三’; exports = project; ),那么你在引用的文件中只能拿到一个 {}。
- 原因是因为 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的区别相关推荐
- node.js中exports与module.exports的区别分析
前言 关于Node.js中的exports和module.exports,很多时候都比较容易让人混淆,弄不清楚两者间的区别.那么我们就从头开始理清这两者之间的关系. 来源 在开发Node.js应用的时 ...
- Node.js: exports 和 module.exports 的区别
我理解的exports 和 module.exports 的区别,欢迎大家吐槽~ 为了更好的理解 exports 和 module.exports 的关系,我们先来补点 js 基础.示例: app.j ...
- Node.js 中 exports 和 module.exports 的区别
每一个模块中都有一个 module 对象, module 对象中有一个 exports 对象 我们可以把需要导出的成员都放到 module.exports 这个接口对象中,也就是 module.exp ...
- exports 和 module.exports 的区别
首先我们需要知道的是,node 真正导出的对象是 module.exports 那exports 又是怎么回事呢? 其实,在一开始,exports 和 module.exports 引用的都是同一个 ...
- Nodejs的exports与module.exports的区别
先建两个文件 index.js util.js 在util.js 写一些内容 exports.hello = 'www';exports.add = function (a,v) {return a ...
- nodeJS学习(9)--- nodeJS模块:exports vs module.exports
模块简介: 通过Node.js的官方API可以看到Node.js本身提供了很多核心模块 http://nodejs.org/api/ 这些核心模块被编译成二进制文件,可以 require('模块名') ...
- 一文解读exports、module.exports 和 export、export default
对于前端初学者来说,exports.module.exports 和 export.export default 容易让人产生误解,笔者顺便写篇文章解读一下. 第一部分:exports 和 modul ...
- exports 和 module.exports
(1)exports和module.exports的作用都是将文件模块里面的方法和属性暴露给require返回的对象进行调用,区别就是exports暴露的方法和属性都可以被module.exports ...
- nodejs中的exports和module.exports
module是随文件而生的全局变量,它有exports属性,这个属性默认是一个空的字典. node的设计者画蛇添足有定义了一个exports全局变量,export指向module.exports所指向 ...
最新文章
- 安装mysql和memcached
- 【后缀自动机】SPOJ 1812-LCSII
- MYSQL5.5 YUM更新安装
- 【计算机网络】HTTP 与 HTTPS ( HTTP 在网络各个层级的传输过程 | HTTPS 工作流程 | HTTPS 弊端 )
- MySQL技术内幕读书笔记(一)——Mysql体系结构和存储引擎
- 【大会】AI能解决哪些问题?
- 支付宝备用金七天不还会不会上征信?
- c# 指定打开某个路径下的CMD_【自学C#】|| 笔记 25 文件的操作
- 安卓开发仿微信图片拖拽_Android 仿微信朋友圈图片拖拽返回
- Box2dの学习制作超级积木完整版
- Codeforces Round #595 (Div. 3) E. By Elevator or Stairs?
- 2014年9月-前端开发月刊
- uni-app开发经验分享十五: uni-app 蓝牙打印功能
- 五、 线性判别分析 LDA
- 我的世界服务器显示空岛等级,mc空岛每种方块等级 | 手游网游页游攻略大全
- 写给迷茫中的程序员兄弟:如何打造最快的职场晋升神话
- 2020 3 PLC PON
- php 匿名函数 递归,匿名函数,lambda_C++ lambda 递归调用,匿名函数,lambda,c++ - phpStudy...
- 作为开篇文章,我们聊聊“围城”
- atan 和 atan2
热门文章
- 温暖我的瞬间|榜样的力量
- 辆汽车有一个里程表,该里程表可以显示一个整数,为该车走过的公里数。然而这个里程表有个毛病:它总是从3变到5,而跳过数字4,里程表所有位上的数字都是如此。例如,如果里程表显示33
- 千锋网络安全学习笔记部分3
- Windows10配置Java环境变量
- “前线”与“后方”—数字化转型时代理解华为品质服务的价值
- 设计模式之六大设计原则
- 树莓派4B安装ubuntu20操作系统以及网络问题
- hadoop集群搭建出现的一些问题总结
- vscode提示 拓展主机在过去5分钟内意外终止了3次问题解决...
- 同事对支付宝的评价 及VISA