Node.js(二)-模块化

news2024/9/28 1:15:38

1. 模块化的基本概念

1.1 什么是模块化 

        模块化是指解决一个复杂问题时,自顶向下逐层将系统拆分成若干模块的过程。对于整个系统来说,模块是可组合、分解和更换的单元

1.2 编程领域中的模块化

        编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并互相依赖多个小模块 

代码进行模块化拆分的好处:

  1. 提高了代码的复用性
  2. 提高了代码的可维护性
  3. 可以实现按需加载

1.3 模块化规范

        模块化规范就是对代码进行模块化的拆分与组合时,需要遵守的那些规则。例如:

  • 使用什么样的语法格式来引用模块
  • 在模块中使用什么样的语法格式向外暴露成员
  • 模块化规范的好处:大家都遵守同样的模块化规范写代码,降低了沟通的成本,极大方便了各个模块之间的相互调用利人利己。

2. Node.js中的模块化 

2.1 Node.js中模块的分类

Node.js 中根据模块来源的不同,将模块分为了3大类,分别是:

  • 内置模块(内置模块是由 Node.js 官方提供的,例如 fs、path、http 等)
  • 自定义模块 (用户创建的每个.js 文件,都是自定义模块)
  • 第三方模块(由第方三开发出来的模块,并非官方提供的内置模块,也不是用户创建的自定义模块,使用前需要先下载

2.2 加载模块

        使用强大的require()方法,可以加载需要的内置模块、自定义模块、第三方模块进行使用,例如:

// 1.加载内置的fs模块
const fs = require('fs')

// 2.加载用户自定义模块
const custom = require('./custom.js')

// 3.加载第三方模块
const moment = require('moment')

注意:1.使用require()方法加载其他模块时,会执行被加载模块中的代码;2.使用require()方法加载自定义模块时,可以省略 .js的后缀名。

2.3 Node.js中的模块作用域

2.3.1 什么是模块作用域

        和函数作用域类似,在自定义模块中定义的变量、方法等成员,只能在当前模块内被访问,这种模块级别的访问限制,叫做模块作用域。

// 这是01-模块化作用域.js
const userName = '张三'

function sayHello(){
    console.log('大家好,我是:'+userName);
}



// 这是02-test.js
const custom = require('./01-模块作用域')

console.log('custom ',custom );//输出:custom {}
2.3.2 模块作用域的好处

        防止污染全局变量

2.4 向外共享模块作用域成员

2.4.1 module

        在每个 .js 自定义模块中都有一个 module 对象,它里面存储了和当前模块有关的信息,打印如下:

2.4.2 module.exports

        在自定义模块中,可以使用 module.exports 对象,将模块内的成员共享出去,供外界使用。外界用 require()方法导入自定义模块时,得到的就是module.exports 所指向的对象。

2.4.3 共享成员时的注意点

        使用require方法导入模块时,永远以module.exports指向的对象为准。  

2.4.4 exports对象 

        由于 module.exports 单词写起来比较复杂,为了简化向外共享成员的代码,Node 提供了 exports 对象默认情况下exports module.exports 指向同一个对象最终共享的结果,还是以 module.exports 指向的对象为准。

 2.4.5 exports和module.exports的使用误区

         时刻谨记,require() 模块时,得到的永远是 module.exports 指向的对象(图来自于黑马程序员课程PPT,因为这段犯懒没动手):

原理图:

 注意:为了防止混乱,建议大家不要在同一个模块中同时使用 exports 和 module.exports

 2.5 Node.js中的模块化规范

         Node.js遵循了CommonJS模块化规范,CommonJS规范了模块的特性各模块之间如何相互依赖

CommonJS 规定:

  • ①每个模块内部,module 变量代表当前模块。
  • ②module 变量是一个对象,它的 exports 属性(即 module.exports是对外的接口
  • ③加载某个模块,其实是加载该模块的 module.exports 属性。require() 方法用于加载模块

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

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

相关文章

用CHAT了解更多知识点

问CHAT:什么是硅基生命和碳基生命? CHAT回复:硅基生命和碳基生命是两种理论性的生物体类型,这些生物体主要是由硅或碳元素以及其他元素构成的。 碳基生命是我们当前所熟知的生命形式。碳元素能够形成稳定且复杂的分子,…

圆中点算法

中心在原点,半径为 R 的圆的隐式函数方程为 F ( x , y ) x 2 y 2 − R 2 0 F(x, y) x^2 y^2 - R^2 0 F(x,y)x2y2−R20 把像素上的点的坐标代入上述隐式方程 八分法画圆算法 利用坐标轴和与坐标轴夹角 45 度的直线 原理 假设圆弧起点 x 0 x0 x0&#xff0…

乐吾乐大屏可视化前景和发展趋势

引言 在如今数智信息化时代,乐吾乐大屏可视化作为信息展示和决策支持的强大工具,正在迅速崛起,并在多个行业中发挥关键作用。本文将探讨乐吾乐大屏可视化的当前状态、未来前景以及发展趋势,以期为读者提供对这一技术的深入了解。 …

信号优先级与安全性

问题 对于同一个进程,如果存在两个不同的未决实时信号,那么先处理谁? 信号优先级的概念 信号的本质是一种软中断 (中断有优先级,信号也有优先级) 对于同一个未决实时信号,按照发送先后次序递送给进程 对于不同的未…

R语言绘图教程汇总 | 2023

2023年总结 2023年即将结束,我们即将迎来2024年。2023年,我们做了什么呢??这个是个值得深思的问题…? 12月份是个快乐且痛苦时间节点。前一段时间,单位需要提交2023年工作总结,真的是憋了好久才可以下笔…

苹果怎么调字体大小?详细教程在这,赶快get起来!

在我们使用苹果手机时,可能会遇到需要调整字体大小的情况。合适的字体大小能够提高阅读体验和舒适度,使得手机使用更加便捷。然而,还有很多用户并不知道苹果怎么调字体大小。别着急!本文将为您详细介绍操作方法,帮助您…

11-Kafka

1 Kafka Kafka是一个分布式流式数据平台,它具有三个关键特性 Message System: Pub-Sub消息系统Availability & Reliability:以容错及持久化的方式存储数据记录流Scalable & Real time 1.1 Kafka架构体系 Kafka系统中存在5个关键组件 Producer…

用栈和队列分别实现求解迷宫问题(c++,c)

求解迷宫问题:给定一个迷宫要求输出其路径。 给出的迷宫如下(可自行更改) 可用两种方法实现1.栈2.队列 用栈只能找到路但路不是最简的最简的要用队列实现 用栈实现(解析都在代码里了) c(实现&#xff0…

压力应变电桥信号隔离放大变送器差分输入变送直流模块0-10mV/0-20mV/0-±10mV/0-±20mV转0-5V/0-10V/4-20mA

主要特性 DIN11 IPO 压力应变桥信号处理系列隔离放大器是一种将差分输入信号隔离放大、转换成按比例输出的直流信号导轨安装变送模块。产品广泛应用在电力、远程监控、仪器仪表、医疗设备、工业自控等行业。此系列模块内部嵌入了一个高效微功率的电源,向输入端和输…

TikTok音频书籍:通过短音频探索全新阅读体验

在数字时代,社交媒体平台不仅改变了人们获取信息的方式,还推动了传统媒体的创新。TikTok,作为一款全球短视频平台,不仅塑造了用户的娱乐方式,还成为一种创新的阅读平台。本文将深入探讨TikTok音频书籍的兴起&#xff0…

第二证券:A股“磨底”中等待向上突破

A股“磨底”中等候向上打破。从A股两市成交额、首要指数估值和风险溢价看,当时A股处于中长时刻底部区间,投资者倾向于将中长时刻问题在短期定价,市场风险偏好还有待修正。工作装备上,年底板块轮动加速将成为首要特征,大…

【数据结构和算法】删掉一个元素以后全为 1 的最长子数组

其他系列文章导航 Java基础合集数据结构与算法合集 设计模式合集 多线程合集 分布式合集 ES合集 文章目录 其他系列文章导航 文章目录 前言 一、题目描述 二、题解 2.1 方法一:滑动窗口 2.2 滑动窗口解题模板 三、代码 3.1 方法一:滑动窗口 四…

全平台跨境电商产品数据采集商品详情API接口

跨境电商模式,有很多的小伙伴们自己不备货,而是做搬货,电商数据运营的小伙伴们应该非常头疼每天的数据采集导出-整理的日常,今天介绍一款全平台电商数据采集API接口 独立站卖家导航: 独立站产品数据采集: …

微服务-springcloud(eureka实践, nacos实践)

Spring 体系图 版本关系 eureka 实践 1 父工程依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.14</version> </parent> <dependencyManage…

【每日一题】不浪费原料的汉堡制作方案

文章目录 Tag题目来源解题思路方法一&#xff1a;解方程 写在最后 Tag 【解方程】【2023-12-25】 题目来源 1276. 不浪费原料的汉堡制作方案 解题思路 方法一&#xff1a;解方程 思路 这是一个简单的解决二元一次方程的问题。 根据题意有以下关系式&#xff1a; { t o t …

【MybatisPlus快速入门】(2)SpringBoot整合MybatisPlus 之 标准数据层开发 代码示例

目录 1 标准CRUD使用2 新增3 删除4 修改5 根据ID查询6 查询所有7 MyBatis-Plus CRUD总结 之前我们已学习MyBatisPlus在代码示例与MyBatisPlus的简介&#xff0c;在这一节中我们重点学习的是数据层标准的CRUD(增删改查)的实现与分页功能。代码比较多&#xff0c;我们一个个来学习…

C++ boost planner_cond_.wait(lock) 报错1225

1.如下程序段 boost unique_lock doesn’t own the mutex: Operation not permitted 问题&#xff1a; 其中makePlan是一个线程。这里的unlock导致错误这个报错 boost unique_lock doesn’t own the mutex: Operation not permitted bool navigation::makePlan(){ //cv::named…

如何挑选便宜好用的VPS?解读Amazon Lightsail的优势

随着云计算技术的不断发展&#xff0c;VPS&#xff08;Virtual Private Server&#xff0c;虚拟私有服务器&#xff09;已成为许多企业和个人网站托管的首选。VPS将服务器资源隔离&#xff0c;使得用户可以获得更高的安全性和独立性&#xff0c;同时提供了更好的性能和扩展性。…

图片素材管理软件Eagle for mac提高素材整理维度

Eagle for mac是一款图片素材管理软件&#xff0c;支持藏网页图片&#xff0c;网页截屏&#xff0c;屏幕截图和标注&#xff0c;自动标签和筛选等功能&#xff0c;让你设计师方便存储需要的素材和查找&#xff0c;提供工作效率。 Eagle mac软件介绍 Eagle mac帮助你成为更好、…

springCould中的zookeeper-从小白开始【3】

目录 1.启动zookeeper❤️❤️❤️ 2.创建8004模块 ❤️❤️❤️ 3.临时节点还是永久节点❤️❤️❤️ 4.创建zk80消费模块❤️❤️❤️ 1.启动zookeeper❤️❤️❤️ 进入自己zookeeper的bin目录下 分别使用命令&#xff1a; ./zkServer.sh start 和 ./zkCli.sh -serve…