Node.js模块的导出

在Node.js中,module.exportsexports 是两种导出模块的方式,它们的作用是使得模块中的内容可以被其他模块引用和使用。

  1. module.exports:
    • module.exports 是一个指向当前模块所导出内容的对象的引用。你可以通过给 module.exports 赋值来导出一个对象、函数、类或者任何其他的JavaScript类型。
// example.js
module.exports = {foo: 'bar',baz: function() {console.log('baz');}
};
  1. exports:
    • exportsmodule.exports 的一个引用,它是一个特殊的变量,指向了 module.exports
// example.js
exports.foo = 'bar';
exports.baz = function() {console.log('baz');
};

不要同时使用exports和module.exports

虽然 exportsmodule.exports 都可以用来导出内容,但是在同一个模块中不应该同时使用它们。因为在模块加载完成后,Node.js 会返回 module.exports 而不是 exports。如果你同时使用了它们,但只有其中一个被赋值,那么最终导出的内容只会是 module.exports 所指向的对象,而 exports 上的属性将被忽略。

// example.js
// 此处使用 exports 导出变量
exports.baz = function() {console.log('baz');
};
// 此处使用 module.exports 导出对象
module.exports = {foo: 'bar'
};

当在同一个模块中同时使用 module.exportsexports 时,只有 module.exports 的赋值会生效,而 exports 上的属性将被忽略。这可能会导致一些意想不到的结果。下面是一个示例来说明这一点:

// example.js
// 此处使用 module.exports 导出对象
module.exports = {foo: 'bar'
};// 此处使用 exports 导出变量
exports.baz = function() {console.log('baz');
};

在上面的例子中,module.exports 导出了一个对象 { foo: 'bar' },而 exports 导出了一个函数 baz。但是,由于最终模块导出的是 module.exports 所指向的对象,而不是 exports,所以 exports 上的属性不会被导出。

因此,在这个例子中,其他模块引入 example.js 后只能访问到 foo,而不能访问到 baz

正确的做法是要么只使用 module.exports,要么只使用 exports

不要直接给exports赋值

exports正确的用法是给他添加属性,如果直接赋值,将会导出空对象。

exports是module.export的一个引用。给exports添加属性就等于是给module.exports添加属性,直接给exports赋值,就改变了变量exports的指向,就是说exports不再是module.exports的引用。那么此时module.exports就是空对象。

// example.js
exports=123

导入example.js模块的文件,得到的是一个空对象。这是因为只有 module.exports 指向的对象才会被导出,而不是 exports

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/814950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3D-Aware Multi-Class Image-to-Image Translation with NeRFs

3D-Aware Multi-Class Image-to-Image Translation with NeRFs 利用NeRFs实现3D感知的多类图像到图像的翻译 Senmao Li1  Joost van de Weijer2  Yaxing Wang1 李森茂 1 范德维杰 2 王亚兴 1  Fahad Shahbaz Khan3,4  Meiqin Liu5  Jian Yang1 法哈德夏巴兹汗 3,4 刘梅琴 …

CPU架构之---SMP、NUMA

一、缩略词: 缩略词全称含义SMPSymmetric Multi processing对称多处理器(UMA)NUMA(Non-Uniform Memory Access)非一致性内存访问UMAUniform Memory Architecture一致性内存访问 二、SMP简述和框架 2.1 smp简述 SMP(Symmetric M…

随动系统同步性问题(跟随给定和跟随反馈的区别)

1、运动控制比例随动 运动控制比例随动系统_正运动随动系统-CSDN博客文章浏览阅读1.4k次,点赞2次,收藏5次。PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC高速计数器应用(附代码)_RXXW_Dor的博客-CSDN博客本文主要以三菱FX3U系列的高速…

vue2创建项目的两种方式,配置路由vue-router,引入element-ui

提示:vue2依赖node版本8.0以上 文章目录 前言一、创建项目基于vue-cli二、创建项目基于vue/cli三、对吧两种创建方式四、安装Element ui并引入五、配置路由跳转四、效果五、参考文档总结 前言 使用vue/cli脚手架vue create创建 使用vue-cli脚手架vue init webpack创…

使用Redis实现用户最近浏览记录

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 Redis是一个key-va…

使用ROCm的HIP API向量加法程序

一、向量加法程序 Radeon Open Compute (ROCm) 是一个开源平台,用于加速高性能计算 (HPC) 和机器学习应用程序。它支持包括GPUs在内的多种硬件,并提供HIP (Heterogeneous-compute Interface for Portability) 作为CUDA代码的便捷转换工具。为了提供一个…

[spring] rest api security

[spring] rest api security 之前的 rest api CRUD 都没有实现验证(authentication)和授权(Authorization),这里使用 Spring security 进行补全 spring security 是一个非常灵活、可延伸的实现方式,比较简…

C语言 | Leetcode C语言题解之第19题删除链表的倒数第N个结点

题目: 题解: struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {struct ListNode* dummy malloc(sizeof(struct ListNode));dummy->val 0, dummy->next head;struct ListNode* first head;struct ListNode* second dummy;f…

安装 Kali NetHunter (完整版、精简版、非root版)、实战指南、ARM设备武器化指南、andrax、安卓渗透drozer

From:https://www.kali.org/docs/nethunter/ NetHunter 实战指南:https://www.vuln.cn/6430 乌云 存档:https://www.vuln.cn/wooyundrops 1、Kali NetHunter Kali NetHunter 简介 Net(网络),hunter&#x…

FFmpeg: 自实现ijkplayer播放器-02环境搭建

文章目录 安装环境项目工程配置库文件 安装环境 IDE: Qt5.12 库: ffmpeg-4.2.1-win32SDL 项目工程配置 pro文件 TEMPLATE app TARGET SimpleIJKPlayer DESTDIR bin QT core gui widgets #CONFIG debug #DEFINES _UNICODE WIN64 QT_WIDGETS_LIBwin32 { LIBS -L$$PW…

uniapp开发h5端使用video播放mp4格式视频黑屏,但有音频播放解决方案

mp4格式视频有一些谷歌播放视频黑屏,搜狗浏览器可以正常播放 可能和视频的编码格式有关,谷歌只支持h.264编码格式的视频播放 将mp4编码格式修改为h.264即可 转换方法: 如果是自己手动上传文件可以手动转换 如果是后端接口调取的地址就需…

【亲测】国内如何支付Overleaf?Overleaf如何升级标准版专业版?Overleaf升级保姆级教程

0. 【必看】开通步骤简述 升级Overleaf的步骤简要总结如下: 使用虚拟信用卡平台WildCard开通虚拟信用卡(从链接进入可以优惠15元人民币哦)。开卡后,进入WIldcard找到卡片信息进入Overleaf绑定卡片并支付,完成支付后就…

南京观海微电子----快速判断出三极管的好坏

三极管其作用是把微弱信号放大成幅度值较大的信号。可分为硅NPN和锗PNP两种三极管。它有三个极,即基极B,集电极C,发射极E。 我们判断测量三极管时有一个最简易的方法,就是把所有三极管看成两个二极管组成。 可以把NPN管看着两个…

Typora导入功能使用详细

一、 pandoc安装(导入需要的插件) 1. 首次安装完typora,是没法导入的,需要安装pandoc,首先我们先在文件夹里面新建一个Typora文件,然后再找到导入功能点击就可以弹出安装的地址了 2. 点击文件可以找到导入…

毅速:3D打印技术助推压铸模效率飞跃

压铸模,作为压铸件成型的核心工具,其重要性不言而喻。如今,随着3D打印技术的崛起,压铸模的制造迎来了前所未有的革新,特别是在随形水路设计方面的应用,更是让制造效率实现了质的飞跃。 在传统压铸模制造中&…

springboot3整合consul实现服务注册和配置管理快速入门

服务注册: 配置管理: 注册中心的比较: 在微服务的世界中,服务注册是必不可少的。现在比较流行的也就是Consul和Nacos,Zookeeper没有管理界面,一般不建议使用,而Eureka已经处于停更&#xff0…

论文复现 MSE 均方误差 MAR 平均绝对值误差

1、均方误差(L2损失) 均方误差(MSE)是最常用的回归损失函数,计算方法是求预测值与真实值之间距离的平方和,公式如下: 2、平均绝对值误差(L1损失) 平均绝对误差(MAE)是另…

Python学习笔记13 - 元组

什么是元组 元组的创建方式 为什么要将元组设计为不可变序列? 元组的遍历

【leetcode面试经典150题】49. 合并区间(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

2023年蓝桥杯——日期统计

目录 题目链接:1.日期统计 - 蓝桥云课 (lanqiao.cn) 题目描述 思路 代码思路 定义数据结构: 处理每一个月: 检查日期序列在num100中是否存在: 计数匹配的日期数: 输出结果: 代码实现 总结 题目链…