当前位置: 首页 > news >正文

node.js之---CommonJS 模块

CommonJS概念

在 Node.js 中,CommonJS 是一种模块化规范,它定义了如何在 JavaScript 中创建和使用模块。CommonJS 是 Node.js 使用的默认模块系统。它让开发者能够分离代码,便于重用和维护。

CommonJS 模块的基本特性

模块导出

在 CommonJS 模块系统中,module.exportsexports 都是用于导出模块内容的对象,但它们有一些关键的区别。在大多数情况下,二者行为相似,但它们的使用方式和语义有所不同。理解这两者的区别非常重要,尤其是在导出多个功能或自定义导出时。

1、module.exports 和 exports 的关系

  • exports 是 module.exports 的一个引用,最初它们指向同一个对象。
  • module.exports 是模块的最终导出对象,最终通过 require() 引用模块时返回的内容就是 module.exports 的值。
  • exports 是 module.exports 的一个快捷引用,可以用来简化导出语法。

2、关键区别

  1. 初始化时的关系

    • 在每个模块加载时,Node.js 会自动创建一个 module.exports 对象,并且 exports 是 module.exports 的引用(即 exports === module.exports)。
    • 你可以通过 exports 添加属性和方法,这样 module.exports 对象也会自动更新。
  2. 直接赋值的区别

    • 如果你直接修改 module.exports(例如,给 module.exports 赋一个新的对象),exports 将不再与 module.exports 保持引用关系。此时,exports 和 module.exports 不再指向同一个对象。
    • 但是,如果你修改 exports 里的属性(例如,exports.add = ...),那么这会影响 module.exports

模块导入

使用 require() 函数导入模块。

// app.js
const math = require('./math');console.log(math.add(1, 2));       // 输出: 3
console.log(math.subtract(5, 3));  // 输出: 2

CommonJS 模块的关键点

  1. 同步加载
    CommonJS 模块是同步加载的。这意味着,当 require() 被调用时,Node.js 会同步地加载并执行模块代码,然后返回模块的导出内容。

  2. 每个模块只加载一次
    在 Node.js 中,一个模块会被加载并执行一次。之后,对于同一个模块的任何后续 require() 调用,都会返回相同的模块缓存(module.exports)。这可以提高性能,因为同一模块的代码不会被执行多次。

  3. 模块作用域
    每个模块都有自己的作用域。模块内的变量和函数不会泄露到全局作用域,只能通过 module.exports 导出访问。这样可以避免命名冲突。

相关文章:

node.js之---CommonJS 模块

CommonJS概念 在 Node.js 中,CommonJS 是一种模块化规范,它定义了如何在 JavaScript 中创建和使用模块。CommonJS 是 Node.js 使用的默认模块系统。它让开发者能够分离代码,便于重用和维护。 CommonJS 模块的基本特性 模块导出 在 CommonJ…...

关于AI面试系统2025年趋势评估!

在快速发展的科技浪潮中,AI技术正以前所未有的速度渗透到各行各业。企业招聘领域,作为人才选拔的关键环节,也不例外地迎来了AI面试系统的广泛应用和持续创新。2025年,AI面试系统不仅成为企业招聘的主流工具,更在智能化…...

SQL—替换字符串—replace函数用法详解

SQL—替换字符串—replace函数用法详解 REPLACE() 函数——查找一个字符串中的指定子串,并将其替换为另一个子串。 REPLACE(str, old_substring, new_substring)str:要进行替换操作的原始字符串。old_substring:要被替换的子串。new_substri…...

《Vue3实战教程》40:Vue3安全

如果您有疑问,请观看视频教程《Vue3实战教程》 安全​ 报告漏洞​ 当一个漏洞被上报时,它会立刻成为我们最关心的问题,会有全职的贡献者暂时搁置其他所有任务来解决这个问题。如需报告漏洞,请发送电子邮件至 securityvuejs.org。…...

软件项目验收测试需进行哪些测试?软件检测机构分享验收测试作用

在信息技术高速发展的今天,软件项目的验收测试作为软件开发生命周期中至关重要的一环,扮演着不可或缺的角色。软件项目验收测试是在软件开发完成后,依据需求文档和设计规范,对软件系统进行的一项综合性测试。其主要目的是验证开发…...

css实现文字描边

效果 学习啦 -webkit-text-stroke-width: 设置文本描边的宽度,值可以是任何长度单位(如 px, em, rem 等) -webkit-text-stroke-color:设置文本描边的颜色,值可以是任何颜色值(如 red, green, bl…...

(二)当人工智能是一个函数,函数形式怎么选择?ChatGPT的函数又是什么?

在上一篇文章中,我们通过二次函数的例子,讲解了如何训练人工智能。今天,让我们进一步探讨:面对不同的实际问题,应该如何选择合适的函数形式? 一、广告推荐系统中的函数选择 1. 业务目标 想象一下&#x…...

数据挖掘——回归算法

数据挖掘——回归算法 回归算法线性回归最小二乘法优化求解——梯度下降法逻辑回归逻辑回归函数逻辑回归参数估计逻辑回归正则化 决策树回归小结 回归算法 回归分析 如果把其中的一些因素(房屋面积)作为自变量,而另一些随自变量的变化而变化…...

AIGC与未来的通用人工智能(AGI):从生成内容到智能革命

目录 第一部分:AIGC概述 1.1 什么是生成式人工智能(AIGC) 1.2 AIGC的应用 第二部分:通用人工智能(AGI)概述 2.1 什么是通用人工智能(AGI) 2.2 AGI的关键特征 2.3 当前AGI的挑战 第…...

jQuery学习笔记3

jQuery 事件注册 jQuery 事件处理 <div></div><ul><li>我们都是好孩子</li><li>我们都是好孩子</li><li>我们都是好孩子</li><li>我们都是好孩子</li><li>我们都是好孩子</li></ul><o…...

SpringMVC(六)拦截器

目录 1.什么是拦截器 2.拦截器和过滤器有哪些区别 3.拦截器方法 4.单个拦截器的执行流程 5.使用拦截器实现用户登录权限验证&#xff08;实例&#xff09; 1.先在html目录下写一个login.html文件 2.在controller包下写一个LoginController文件 3.加拦截器 1.创建一个conf…...

单区域OSPF配置实验

1、绘制拓扑图 2、配置ip地址 R0 Router(config)#interface FastEthernet0/0 Router(config-if)#ip address 192.168.1.1 255.255.255.0 Router(config-if)#no shutdown Router(config-if)#exit Router(config)#interface FastEthernet0/1 Router(config-if)#ip address 192.16…...

Linux上vi(vim)编辑器使用教程

vi(vim)是上Linux非常常用的编辑器&#xff0c;很多Linux发行版都默认安装了vi(vim)。vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率。vi是“visual interface”的缩写&#xff0c;vim是vi IMproved(增强版的vi)。在一般的系统管理维护中vi就够用&#xff0c;如果想使用…...

虚拟机图像界面打不开了

今天打开虚拟机的时候图形界面打不开&#xff0c;进入到tty1中&#xff0c;而且还没有网&#xff0c;找了好几个办法都不行最后找到这个博主发的&#xff0c;解决了 修复 https://www.cnblogs.com/shuimuqingyang/p/15070690.html...

《经典力学》笔记

文章目录 直线运动弹簧和简谐运动动能&#xff0c;势能&#xff0c;机械能动量动量守恒机械能守恒弹性碰撞和非弹性碰撞冲量 圆周运动匀速圆周运动转动惯量平行轴定理 角动量角动量守恒 英语 直线运动 弹簧和简谐运动 F s → − k x 1 → \overrightarrow{F_s}-k \overrighta…...

【论文+源码】基于Spring和Spring MVC的汉服文化宣传网站

为了实现一个基于Spring和Spring MVC的汉服文化宣传网站,我们需要创建一个简单的Web应用程序来展示汉服文化和相关信息。这个系统将包括以下几个部分: 数据库表设计:定义文章、用户和评论的相关表。实体类:表示数据库中的数据。DAO层接口及MyBatis映射文件:用于与数据库交…...

计算机的错误计算(一百九十九)

摘要 用大模型判断下面四个函数 有何关系&#xff1f;并计算它们在 x0.00024时的值&#xff0c;结果保留10位有效数字。两个大模型均认为它们是等价的。实际上&#xff0c;还有点瑕疵。关于计算函数值&#xff0c;大模型一只是纸上谈兵&#xff0c;没计算&#xff1b;大模型二…...

【AI日记】25.01.02 kaggle 比赛 3-1

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】 工作 参加&#xff1a;kaggle 比赛 Forecasting Sticker Sales时间&#xff1a;4 小时 读书 书名&#xff1a;秦制两千年时间&#xff1a;5 小时阅读原因&#xff1a;之前看过 《商君书》&#xff0c;对秦制…...

el-pagination 为什么只能展示 10 条数据(element-ui@2.15.13)

好的&#xff0c;我来帮你分析前端为什么只能展示 10 条数据&#xff0c;以及如何解决这个问题。 问题分析&#xff1a; pageSize 的值&#xff1a; 你的 el-pagination 组件中&#xff0c;pageSize 的值被设置为 10&#xff1a;<el-pagination:current-page"current…...

Ps:将数据组作为文件导出

Ps菜单&#xff1a;文件/导出/数据组作为文件 Export/Data Sets as Files “将数据组作为文件导出” Export Data Sets as Files命令是 Photoshop 数据驱动设计功能的一部分&#xff0c;用于结合可变数据和模板&#xff0c;生成多个文件。 1、自动化批量生成 适用于名片、证书、…...

nohup.out日志

1、nohup.out生成 在你执行 nohup java -jar ruoyi-admin.jar & 时&#xff0c;程序原本要输出到控制台的所有内容&#xff0c;包括日志框架输出到控制台的部分&#xff0c;都会被写入 nohup.out 。nohup 命令运行程序时&#xff0c;默认情况下&#xff0c;nohup 会把程序的…...

01 背包

文章目录 前言代码思路 前言 总是感觉有点没有完全懂&#xff0c;但是说起来的时候好像又懂一点点&#xff0c;就是我现在的状态。 代码 二维的直接的版本 #include<iostream> #include<algorithm>using namespace std;const int N 1010; int f[N][N]; int v[…...

QT-------------多线程

实现思路 QThread 类简介&#xff1a; QThread 是 Qt 中用于多线程编程的基础类。可以通过继承 QThread 并重写 run() 方法来创建自定义的线程逻辑。新线程的执行从 run() 开始&#xff0c;调用 start() 方法启动线程。 掷骰子的多线程应用程序&#xff1a; 创建一个 DiceThre…...

【JVM】深入了解Java虚拟机-------内存划分、类加载机制、垃圾回收机制

目录 什么是JVM? 内存划分&#xff1a; 1.堆 &#xff08;共享&#xff09; 2.栈 &#xff08;私有&#xff09; 3.元数据区&#xff08;共享&#xff09; 4.程序计数器&#xff08;私有&#xff09; 示例&#xff1a; JVM 类加载 一.类加载过程 1.加载 2.验证 3.…...

k8s部署juicefs

操作系统k8smysqlminiojuicefs内核centos8.21.19.18.0.39RELEASE.2023-12-20T01-00-02Zv0.19.04.18.0-193.el8.x86_64 本文k8s较老采用老版本的juicefs&#xff0c;中间件也都是部署在k8s上。测试是否能成功创建动态pvc挂在到测试pod当中并查看到数据信息。一些偏理论知识就不多…...

【ArcGIS微课1000例】0136:制作千层饼(DEM、影像、等高线、山体阴影图层)

文章目录 一、效果展示二、数据准备三、制作过程1. 打开软件2. 制作DEM图层3. 制作影像层4. 制作TIN层5. 制作等高线层四、注意事项一、效果展示 二、数据准备 订阅专栏后,从专栏配套案例数据包中的0136.rar中获取。 1. dem 2. 影像 3. 等高线 4. tin 三、制作过程 1. 打开软…...

Ajax数据爬取

有时我们用requests 抓取页面得到的结果&#xff0c;可能和在浏览器中看到的不一样:在浏览器中可以看到正常显示的页面数据&#xff0c;而使用requests 得到的结果中并没有这些数据。这是因为 requests 获取的都是原始 HTML 文档&#xff0c;而浏览器中的页面是JavaScript 处理…...

快速上手大模型的对话生成

本项目使用0.5B小模型&#xff0c;结构和大模型别无二致&#xff0c;以方便在如CPU设备上快速学习和上手大模型的对话上传 #mermaid-svg-Z86hUiQZ0hg9BVji {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Z86hUiQZ0h…...

DateTimeExtensions:一个轻量C#的开源DateTime扩展方法库

推荐一个专门为System.DateTime编写的扩展方法库。 01 项目简介 该项目主要是为System.DateTime和System.DateTimeOffset的编写的扩展方法&#xff0c;包括自然日期差值的文本表示&#xff08;精确和人性化四舍五入&#xff09;、多个时区的节假日和工作日计算。 核心扩展方…...

题解:监控屏幕调整问题

问题描述 Reca 公司生产高端显示器&#xff0c;其中最受欢迎的型号是 AB999。屏幕尺寸为 $x \times y$ 的比例。由于某些生产特性&#xff0c;屏幕参数总是整数。最终&#xff0c;屏幕边长比例 $x:y$ 需要适应用户的需求。 为了满足用户需求&#xff0c;公司需要调整屏幕尺寸…...