node.js模块化分析

什么是Node.js模块化

Node.js中的模块化‌是指将一个大文件拆分成独立且相互依赖的多个小模块。每个JS文件被视为一个独立的模块,模块之间是互相不可见的。如果一个模块需要使用另一个模块,则需要使用指定的语法来引入该模块,并且只能使用模块所暴露的内容。

Node.js模块化的好处

1、‌避免全局变量污染‌:在团队协作中,不同成员会独立编写各自负责的代码。如果多个文件定义了同一个全局变量,会导致变量同名而报错。模块化可以避免这种情况,每个模块都有自己的作用域,避免了全局变量污染‌。
2、‌提高代码的可维护性和复用性‌:通过模块化,可以将复杂的系统拆分成多个小模块,每个模块负责一部分功能,这样不仅提高了代码的可维护性,也方便了代码的复用‌。

Node.js模块化的分类

// Node.js中的模块根据来源不同,可以分为以下三类:
// 1、‌内置模块‌:由Node.js官方提供的模块,例如fs、path、http等‌。
const fs = require('fs');
// 2、‌自定义模块‌:用户创建的每个.js文件,都是自定义模块‌。
const indexCp = require('./index.js')
// 3、‌第三方模块‌:由第三方开发出来的模块,使用前需要先下载‌。
const moment = require('moment')

模块作用域

在Node.js中,每个文件都被视为一个独立的模块,并拥有自己的模块作用域。这意味着在一个模块中定义的变量、函数或类是私有的,无法被其他模块直接访问。这种作用域的隔离性确保了模块之间的互不干扰,避免了全局变量的污染。

module 对象

在Node.js中,每个模块(文件)都会自动创建一个module对象。该对象包含了有关模块的各种信息,并提供了导出模块内容的接口。

// 主要属性:
// exports:这是导出一个模块的核心对象,使用require导入一个模块时,
const indexCp = require('./index')  // 默认情况下,indexCp是空对象 module.expores = {}
// filename:表示当前模块的文件路径
// id:表示当前模块的ID
// parent:表示引用当前模块的父模块
// paths:表示Node.js在解析模块时搜索模块的路径数

在这里插入图片描述
在这里插入图片描述

module.exports 应用

// index.js
const initUsername = '小灰灰学编程'
function getName(){console.log(`${initUsername}来自index.js模块`)
}
// 将变量&方法导出
module.exports = {initUsername,getName
}// modularization.js
const indexModule = require('./index') // 引入模块
console.log(indexModule, 'indexModule')
indexModule.getName() // 执行模块中的方法

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

sql练习专场(一) (1-5)

这是总结的一些sql题目,共25道题,每个博客会写5道题 第一题 这道题需要找出连续活跃3天以上的用户,其中每个用户每天可以连续登录多次。 create table sql1_1(uid string,dt string );insert into sql1_1 values(A,2023-10-01),(A,2023…

自动化立体仓库:详细设计方案

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 这份文件是关于自动化立体仓库设计方案的详细介绍,包括了自动化立体仓库的重要性、特点、设计程序、机械部分设计方案、系统硬件设计、系统软件设计以及系统调试等关键部分…

windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576

问题描述 我目前的环境是: 编辑器: Microsoft Visual Studio Community 2022 (64 位) 运行的脚本是ffmpeg自带的remux样例,只不过我想用c语言执行这个样例。在执行的过程中报错如下图: C4576 后跟初始值设定项列表的带圆括…

CentOS 文件系统扩容与缩容

一、 概述 理解Linux文件系统的管理,需要了解以下的一张图: 一般使用LVM (Logical Volume Manager) 管理磁盘存储,该工具允许用户更灵活地分配和管理存储空间。主要有以下几个概念: PV(Physical Volume,物…

Linux系统使用第三方邮件客户端发送邮件

文章目录 安装第三方邮件客户端(s-nail)S-nail的简单介绍重要的特性差异 配置邮件服务配置文件 (以QQ邮箱为例)获取QQ邮箱授权码获取QQ服务器证书使用 OpenSSL 获取 QQ 邮箱服务器的证书安装OpenSSL连接到 QQ 邮箱的 SMTP 服务器并下载证书保存证书验证证…

家常菜点餐|基于java和小程序的家庭大厨家常菜点餐系统设计与实现(源码+数据库+文档)

家常菜点餐系统 目录 基于java和小程序的家庭大厨家常菜系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取: 博主介绍:✌️大厂码农|毕设布道师&am…

利士策分享,青年暴富难守,因何在?

利士策分享,青年暴富难守,因何在? 在人生的长河中,有些人似乎被命运特别眷顾,在年轻之时便轻易地获得了财富。 然而,令人遗憾的是,这些早年得志、财富易得的人,往往难以长久地守住这份来之不…

Echarts环形图引线设置

直接上图吧 直接上代码吧 let labelArr [直接访问, 邮件营销, 联盟广告, 视频广告, 搜索引擎]; let valueArr [{ value: 335, name: 直接访问 },{ value: 310, name: 邮件营销 },{ value: 234, name: 联盟广告 },{ value: 135, name: 视频广告 },{ value: 154, name: 搜索引…

Java8->Java19的初步探索

导读 最近网上开始了大量的关于Java19的讨论,我也想着用了Java8这么久该接受一点新的东西了,于是便开始研究了起来 Java 19 Java19是一个免费版本。下面是JDK19的支持图 image.png (来源: https://www.bilibili.com/video/BV1V84…

软件设计师-上午题-15 计算机网络(5分)

计算机网络题号一般为66-70题,分值一般为5分。 目录 1 网络设备 1.1 真题 2 协议簇 2.1 真题 3 TCP和UDP 3.1 真题 4 SMTP和POP3 4.1 真题 5 ARP 5.1 真题 6 DHCP 6.1 真题 7 URL 7.1 真题 8 浏览器 8.1 真题 9 IP地址和子网掩码 9.1 真题 10 I…

nodejs批量修改word文档目录样式

工作中遇到一个需求:写个nodejs脚本,对word文档(1000+个)的目录页面进行美化。实现过程遇到不少麻烦,在此分享下。 整体思路 众所周知,Docx格式的Word文档其实是个以xml文件为主的zip压缩包,所以,页面美化整体思路是:先将文档后缀名改为zip并解压到本地,然后将关键的…

MathType在Word中的安装与配置记录

一、记录过程 1.MathType安装包下载 可直接下载本人已经安装过的安装包,亲测可以使用,下载链接如下: 链接:https://pan.baidu.com/s/1g-iOgKIqzSNz0E5rEUryug 提取码:1kb3 2.安装后配置 word中会出现mathtype的选项…

无人机之中继通信技术篇

一、定义与原理 无人机中继通信技术是指通过无人机搭载中继设备,将信号从一个地点传输到另一个地点,从而延长通信距离并保持较好的通信质量。其原理类似于传统的中继通信,即在两个终端站之间设置若干中继站,中继站将前站送来的信号…

轴流风机和后倾式风机的安装要求

后向离心风机风压大,风量足,安装方便。因为不需要蜗壳,所以风道往往需要自行设计,而风道的合理与否,大大影响了后向离心风机的效率。那么后向离心风机的安装技巧有哪些?怎样达到风机的最佳使用效果呢&#…

植物神经紊乱不用怕,这些维生素来帮你!

你是否经常感到身体疲惫、情绪波动大、心悸、胸闷?这可能是植物神经紊乱在作祟。别担心,通过合理的维生素补充,可以有效缓解症状,提升生活质量。今天,我们就来聊聊植物神经紊乱患者应该补充哪些维生素。 &#x1f50d…

使用C语言进行信号处理:从理论到实践的全面指南

1. 引言 在现代操作系统中,信号是一种进程间通信机制,它允许操作系统或其他进程向一个进程发送消息。信号可以用来通知进程发生了一些重要事件,如用户请求终止进程、硬件异常、定时器超时等。掌握信号处理技术对于开发健壮、高效的系统程序至…

LabVIEW配电产品精度测试系统

开发了一种基于LabVIEW平台的配电产品精度测试系统,通过自动化测试流程实现更高的测试准确性与效率。系统采用串口和TCP通信技术,与多功能交流采样变送器和配电设备无缝数据交互,提升了测试工作的可靠性和一致性。 一、项目背景 在配电产品…

基于JAVA SpringBoot和Vue社区网格化管理服务平台设计

摘要 本文旨在设计并实现一个基于Java SpringBoot和Vue技术的社区网格化管理服务平台。该平台主要包括用户功能和管理员功能两大部分,用户功能涵盖单位管理、问卷调查、论坛讨论、公告查看等;管理员功能则包括单位管理、基础数据维护、帖子和公告类型管…

鸢尾博客项目开源

1.博客介绍 鸢尾博客是一个基于Spring BootVue3 TypeScript ViteJavaFx的客户端和服务器端的博客系统。项目采用前端与后端分离,支持移动端自适应,配有完备的前台和后台管理功能。后端使用Sa-Token进行权限管理,支持动态菜单权限,服务健康…

IBinder源码分析

基础概念 binder 是 Android 中主要的跨进程通信方式,binder 驱动和 service manager 分别相当于网络协议中的路由器和 DNS,并基于 mmap 实现了 IPC 传输数据时只需一次拷贝。binder 包括 BinderProxy、BpBinder 等各种 Binder 实体,以及对 …