Node.js模块导出exports 和 module.exports 的区别

安路科技FPSoC开发实战:从芯片特性到边缘计算应用 本文深入解析安路科技FPSoC芯片在边缘计算领域的开发实战,重点介绍SALDRAGON系列芯片的异构计算架构优势,包括RISC-V/ARM处理器与FPGA的协同工作。通过工业控制和智能视觉应用案例,展示硬件加速实现与低功耗设计技巧,帮助开发者高效利用FPSoC进行边缘计算应用开发。 阅读详情

每一个node.js执行文件,都自动创建一个module对象,同时,module对象会创建一个叫exports的属性,初始化的值是 {}

 module.exports = {};

exports和module.exports指向同一块内存,但require()返回的是module.exports而不是exports。

var str = "difference"
exports.a = str;
exports.b = function () {

}

给 exports 赋值其实是给 module.exports 这个空对象添加了两个属性而已,上面的代码相当于:

var str = "difference"
module.exports.a = str;
module.exports.b = function () {

}

先来看下exports和module.exports的使用

使用exports

app.js

var s = require("./log");
s.log("hello");

log.js


exports.log =function (str) {
    console.log(str);
}

使用module.exports

app.js

var s = require("./log");
s.log("hello");

log.js

module.exports =function (str) {
    console.log(str);
}

上述两种用法都没问题,但如果这样使用

  exports = function (str) {
    console.log(str);
}

运行程序就会报错。

前面的例子中给 exports 添加属性,只是对 exports 指向的内存做了修改。而上例则是对exports指向的内存进行了覆盖,使exports指向了一块新的内存,这样,exports和module.exports指向的内存并不是同一块,exports和module.exports并无任何关系。exports指向的内存有了变化,而module.exports指向的内存并无变化,仍为空对象{}。

require得到的会是一个空对象,则会有

TypeError: s.log is not a function

报错信息。

再看下面的例子

app.js

 var x = require('./init');

 console.log(x.a)

init.js

 module.exports = {a: 2}
 exports.a = 1 

运行app.js会有输出

2

这也就是module.exports对象不为空的时候exports对象就自动忽略,因为module.exports通过赋值方式已经和exports对象指向的变量不同了,exports对象怎么改和module.exports对象没关系了。

 exports = module.exports = somethings

等价于

  module.exports = somethings
  exports = module.exports

原因也很简单, module.exports = somethings 是对 module.exports 进行了覆盖,此时 module.exports 和 exports 的关系断裂,module.exports 指向了新的内存块,而 exports 还是指向原来的内存块,为了让 module.exports 和 exports 还是指向同一块内存或者说指向同一个 “对象”,所以我们就 exports = module.exports 。

最后,关于exports和module.exports的关系可以总结为

  1. module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}
  2. exports 是指向的 module.exports 的引用
  3. require() 返回的是 module.exports 而不是 exports
未隔离电源设备使用usb转串口调试导致串口模块爆炸烧坏事故记录 这个事就发生在前两天,我们公司的wifi模块被客户用到了咖啡机上,客户寄了一台整机给我们协助调试,还送了几包咖啡豆,本想着还能打个咖啡喝一喝的,但就在咖啡机刚寄过来第一天,就出事了。而这个事故的发生,竟然仅仅是因为同事接了个串口模块到电脑调试打印导致的。谁也想不到,这个3.3V的供电的wifi模块居然还有这么大的威力。直接将usb转TTL串口模块的转换芯片给爆开了,咖啡机也给弄坏了,据同事描述当时情况就只见到一片火光和一声巨响,状况比较惨烈,所幸的是笔记本电脑没有烧坏,但是直接给崩蓝屏了。 ... 阅读详情

相关推荐

STM32学习笔记 二、基于STM32F103C8T6和STM32CubeMX实现UART串口通信数据收发

系列文章目录 一、基于STM32F103C8T6最小系统板和STM32CubeMX实现LED灯循环闪烁 文章目录系列文章目录前言一、配置CubeMX二、逻辑代码部分 前言 这次我用的板子是一个用STM32F103C8T6作为主控芯片的一个数据采集卡,两个LED灯连接的引脚是PB3与PB4,TX与RX引脚分别是PA9和PA10。 一、配置CubeMX 1、新建工程; 2、配置时钟源,在RCC里面的HSE配置的是晶振时钟; 3、配置程序烧录引脚SYS为SWD模式; 4、配置GPIO口,配置一个LE

遗忘丶的博客 1万+

(区别、详解、使用)module.exports与exports,export与export default,import 与require

(详解与使用)module.exports与exports,export与export default,import 与require

大雾起了清晨 1万+

Amesim(五):单个悬架系统搭建

一、组成 单个悬架系统组成包括:端子,质量块*2,弹簧,阻尼器,速度路面反馈,路面激励。 二、搭建 打开Amesim,在 library 选择 1D Mechanical 选择质量模块,添加到skech中,并按 ctrl+r 旋转质量块,将箭头朝上,设置规定的力传递正方向 添加弹簧阻尼器,与质量块连接 添加VX模块,将路面的激励传递转化为速度和位移,传递给悬架系统 在...

林小川的博客 7169

详解module.exports与exports,export与export default,import 与require

详解module.exports与exports,export与export default,import 与require

m0_55333789的博客 3380

c语言串口编程详解

串口: 一种异步通信接口,通常用于低速数据传输。RS-232: 最常见的串口标准,定义了电气特性、连接器和信号线。UART: 通用异步收发传输器,是实现串口通信的硬件模块。通过以上内容,你应能够理解并实现C语言在Windows和Linux平台上的串口编程。希望这本手册能帮助你在实际项目中顺利进行串口通信开发。如果有任何疑问或需要进一步的帮助,请随时提问。

jkzyx123的博客 2224

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

2024年全国青少年信息素养大赛复赛真题(算法创意实践挑战赛C++试卷:带解析)

王老师青少年编程 4786

JS模块导入导出大全——module.exports、exports、export和export default的使用和区别

一、介绍 1.module.exports 和exports是commonjs的规范 2.export 和export default 是es6 规范 3.require 是amd规范引入方式 4.import 是es6 的一个语法标准 二、module.exports 和exports的使用 module 变量代表当前模块,这是个对象,会创建exports的属性,属性的默认值是空对象 //导出使用方法: function add(a,b) { return a+b; }...

qq_53669554的博客 3万+

2021年全网最细 VirtualBox 虚拟机安装 Ubuntu 20.04.2.0 LTS及Ubuntu的相关配置

目录一、VirtualBox 虚拟机的安装1. VirtualBox 的下载和安装2. 设置 VirtualBox 存储文件夹3. 在 VirtualBox 创建虚拟机二、Linux 操作系统(Ubuntu)的安装1. Linux 操作系统(Ubuntu)的下载2. 安装 Ubuntu3. 启动 Ubuntu三、配置 Ubuntu1. 设置终端2. 设置共享剪贴板3. 设置共享文件夹 一、VirtualBox 虚拟机的安装 VirtualBox 是由德国 Innotek 公司开发,由 Sun Microsy

XAMO Lab|代码、调试与复盘笔记 2万+

JavaScript模块的导出和导入之export和module.exports的区别

CommonJS规范中,建议尽量都用 module.exports 导出,然后用require导入 ES6规则中,大部分风格建议,模块中最好在末尾用一个export导出所有的接口module.exports / exports: 只有 Node 支持的导出require: Node 和 ES6 都支持的引入export / import : 只有ES6 支持的导出引入。

LlanyW的专栏 9156

CAPL自动化测试

通过本文的学习,读者应该对CAPL自动化测试有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1528

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署

【STK】手把手教你利用STK进行导弹和反导仿真01 - STK/MMT模块安装部署MMT模块与STK的版本是一一对应的,比如我现在手上的版本是MMT9的,那么我使用的STK的版本也必须是9版本的,如果你现在正在使用的是更高版本的STK,比如说10、11.2、11.6、12.2,那么该怎么办呢?这个经本人尝试,目前是可以多个STK版本共存的,我们可以根据自己的需要安装多个版本的STK下面开始讲解具体的安装步骤,

weixin_44184852的博客 2919

JavaScript第 30 篇,JavaScript中的export、export default、exports 和 module.exports使用详细

⭐在JavaScript中,export 和 export default 是 ES6 模块系统的核心部分,用于从文件中导出函数、关键字,对象或值,使其可以在其他文件中通过 import 语句导入和使用,而 exports和 module.exports 是CommonJS模块系统的一部分,在 Node.js 环境中,你可以使用 exports 或 module.exports 来导出模块,但这并不是 ES6 标准的一部分。

AI Agent 全栈架构师(AI + GIS + Backend)& 数字芯片系统架构师(FPGA),NorthCity Smile的博客(NcSmile,博主域名:https://ncmile.blog.youkuaiyun.com) 2万+

Python爬虫实战:逆向工程与异步爬虫技术,高效抓取国家知识产权局专利数据

相比于传统的Selenium,Playwright由微软开发,支持多浏览器(Chromium, Firefox, WebKit),API更现代,执行速度更快,并且能轻松录制用户操作生成代码。通常,列表中的摘要信息是缩略的,我们需要进入每个专利的详情页获取完整信息(如主权要求、法律状态等)。我们的第一步是手动操作一遍搜索流程,并用Playwright的“录制”功能或开发者工具,找出真正返回专利数据的那一个或多个网络请求。以友好的、对人类行为模拟的方式爬取数据是基本的网络礼仪,也能有效避免你的IP被封锁。

2201_76125261的博客 2420

Node.js的模块导出exports 和 module.exports 的区别

关于exports和module.exports的关系可以总结为: module.exports 初始值为一个空对象 {},所以 exports 初始值也是 {}exports 是指向的 module.exports 的引用require() 返回的是 module.exports 而不是 exports 每一个Node.js执行文件,都自动创建一个module对象,同时,module

adobe1992 580

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Node.JS(4)--模块、exports和module

在node中有一个全局对象global,它的作用和网页中window类似

m0_62520946的博客 776

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

CommonJS与ES6 Module的使用与区别

CommonJS是2009年由JavaScript社区提出的包含了模块化的一个标准,后来被Node.js所采用并实现,也就是说我们在Node.js中用到的模块导入导出都是依照CommonJS标准来实现的。

qq_36760651的博客 1946

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JavaScript模块导入导出

JavaScript模块导入导出CommonJs示例1,默认module.exports 导出是空对象示例2,设置module.exports值。导出一个对象。exports和module.exportsES6exportimportexport default 模块的概念,是在JS用于服务器端编程的时候才会出现。 开发中基本不会将所有的业务逻辑代码放在一个JS文件中,特别是在使用前端框架,进行组件化开发中时,会复用相应的组件。这时,就会用到模块导入/导出的方法了。 CommonJs、AMD、CMD、ES6

dandanfengyun的博客 1481

export、export default 和 module.exports 的区别详解

export、export default 和 module.exports 的区别详解

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 6653

Node 深究module.exports与exports的区别

一、首先我们举一个类似的例子,了解一下: 如果这样还不能理解,没有关系,我们可以看下一个例子,再理解一下: 1、代码部分: var a = 10; var b = a; console.log(a); console.log(b); 2、接下来,我们添加如下代码,再执行一下: a++; 因为我们都是基本数据类型,所以值,都是 “一对一” 进行存储的,改变其中一个值,和其他没有关系。 3...

路虽远,行则必至! 812

es6 import export 与 node 中的module.exports exports

1.export   a.export 变量 export var name = 'jack';export var age = 18;//等同于 var name = 'jack';var age = 18;export {name,age};   a.export 方法 export function sayHello(){ console.log('he...

anshu3524的博客 137

nodejs中exports和module.exports的区别

nodejs中exports和module.exports的区别

qq_34215737的博客 181

Node.js模块化开发规范

Node.js中模块化开发规范 Node.js规定一个JavaScript文件就是一个模块,模块内部定义的变量和函数默认情况下在外部无法得到。 模块内部可以使用exports对象进行成员导出, 使用require方法导入其他模块。 案例:a.js中的变量导入b.js中 第一步:先在a.js中将所需要的变量导出,方法有两种 exports方法 const fn = (x, y) => x + y; exports.fn2 = fn; //第一个fn方法作为exports的属性值,第二个实现的fn

HU_LILI的博客 376

exports、module.exports和export、export default

exports、module.exports和export、export default

liujiujiang的博客 210

exports module.exports export export default之间的关系

exports 和module.exports是CommonJS模块规范 export export default是ES6模块的规范,两者完全是不同的概念。 node应用由模块组成,采用的是CommonJS的规范。根据这个规范,每个文件都是一个模块,有自己的作用域,在一个文件中定义的变量 函数 类都是私有的,对其他的文件不可见。 CommonJS规范规定,每个模块内部,modul...

weixin_30415801的博客 965

CommonJS 与 ES6 Module 的使用与区别

作者:Lpyexplore 原文链接:https://mp.weixin.qq.com/s/2FNcFl-SBE3fciB0ad0_mg 学了JS并且用过Node.js后,对模块化应该是有所了解和使用了,那么一定见过以下两种模块导入导出的方式 第一种: ES6 Module // B.js function show() { console.log('show方法被执行') } export default show // A.js import show from './B.js' show()

时清云的博客 350
上一篇: Lodash,npm包仓库中依赖最多的库
下一篇: SonicOperator之多普勒效应
lxydo
博客等级 码龄12年 98粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值