【Node.js】模块化

news2024/11/18 8:22:09

模块化

          • 模块化的基本概念
          • 模块化规范
          • Node.js中模块化分类
          • 模块作用域
          • 向外共享模块作用域的成员
          • Node.js中的模块化规范

模块化的基本概念
  • 指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程
  • 对于整个系统来说,模块是可组合,分解和更换的单元
  • 编程领域中的模块化,就是遵守固定的规则,把一个大文件拆成独立并相互依赖的多个小模块
  • 好处:
  • 提高了代码的复用性
  • 提高了代码的可维护性
  • 可以实现按需加载
模块化规范
  • 对代码进行模块化的拆分和组合,需要遵守的那些规则
  • 如何引用模块
  • 如何向外暴露成员
Node.js中模块化分类

内置模块(内置模块是Node.js官方提供的,例如:fs,path ,http)

自定义模块(用户创建的每个js文件,都是自定义模块)

第三方模块(由第三方开发出来的模块,使用前需要先下载)

  • 加载模块,使用强大的require()方法,可以加载需要的模块进行使用
  • 使用require()方法加载其他模块时,会执行被加载模块中的代码
//类似:
const http = require('http')
//加载自定义模块的时候,路径要写对,省略后缀名.js也可以成功加载
const http = require('./index.js')
模块作用域

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

  • 优点:
  • 防止全局变量污染的问题
向外共享模块作用域的成员

module对象,在每个js自定义模块中都要一个module对象(谐音猫轴),里面存储了和当前模块有关的信息,在js中打印module

请添加图片描述

  • module.exports对象:
  • 在自定义模块中,可以使用 module.exports对象,将模块内的成员共享出去,供外界使用
  • 外界使用require()方法导入自定义模块时,得到的就是module.exports所指向的对象
  • 共享成员注意点:
  • 使用require()方法导入的结果,永远以module.exports指向的 对象 为准
const num =1
function getnum(){
    console.log("方法",num)
}
module.exports.num='2'
//或者
module.exports.num=num
module.exports[getnum()]
//或者
module.exports.getnum1=function(){
	console.log(666)
}
//这个指向的新对象会覆盖上面导致上面不显示,相当于重新指向一个新的对象
module.exports={
	num:'新对象',
	getnum,//共享方法
	newfunction(){
		console.log('新方法')
	}
}

请添加图片描述

  • exports对象:
  • 为了简化向外共享成员的代码,Node提供了exports对象,默认情况下,exports和module.exports指向同一个对象,但输出还得是module.exports

两者的使用误区:

  • 时刻谨记,require()模块,得到的永远是module.exports指向的 对象
  • 意思就是当多个module.exports指向的 不同 对象,以最后一个对象为准
  • 意思也就是说,exports不能直接共享对象
  • 当exports和module.exports指向不同对象时候,接收时以module.exports指向的对象为准

在这里插入图片描述

Node.js中的模块化规范
  • 遵循CommonJS模块化规范,规定了模块的特性和各模块之间如何相互依赖
  • 规定:
  • 每个模块内部,module变量代表当前模块
  • module变量是一个对象,他的exports属性(即module.exports)是对外的接口
  • 加载某个模块,其实是加载该模块的module.exports属性,require()方法用于加载模块

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

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

相关文章

mysql的一些底层学习

数据库三大范式 1、第一范式:确保每列保持原子性 2、第二范式:确保表中每列都与主键列相关 3、第三范式:确保表中每列都与主键列直接相关而不是间接相关 不要一味的去追求符合范式要求,实际项目中,需求 > 性能 …

GPT-3(Language Models are Few-shot Learners)简介

GPT-3(Language Models are Few-shot Learners) GPT-2 网络架构 GPT系列的网络架构是Transformer的Decoder,有关Transformer的Decoder的内容可以看我之前的文章。 简单来说,就是利用Masked multi-head attention来提取文本信息,之后利用MLP和…

内嵌于球体的多边形

( A, B )---2*30*2---( 1, 0 )( 0, 1 ) 做一个网络让输入只有2个节点,每个训练集里有两张图片,让B的训练集全为0,排列组合A,观察迭代次数平均值的变化。 共得到32组数据, 差值结构 A-B 迭代次数 1 1 3*2*0*0 104…

计算机网络学习笔记(二)物理层

物理层(传输比特0/1)基本概念 物理层下的传输媒体 1. 导引型 同轴电缆,双绞线(绞合可抵御干扰),光纤,电力线 2. 非导引型(调制振幅 频率 相位) 无线电波,微…

SpringBoot整合MybatisPlus(powernode CD2207)(内含教学视频+源代码)

SpringBoot整合MybatisPlus(powernode CD2207)(内含教学视频源代码) 教学视频源代码下载链接地址:https://mp.csdn.net/mp_download/manage/download/UpDetailed 目录SpringBoot整合MybatisPlus(powernode…

项目搭建规范

一. 代码规范 1.1. 集成editorconfig配置 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格。 # http://editorconfig.org root true [*] # 表示所有文件适用 charset utf-8 # 设置文件字符集为 utf-8 indent_style space # 缩进…

数据结构 - 栈 与 队列 - (java)

前言 本篇介绍栈和队列,了解栈有顺序栈和链式栈,队列底层是双链表实现的,单链表也可以实现队列,栈和队列的相互实现和循环队列;如有错误,请在评论区指正,让我们一起交流,共同进步&a…

Splashtop:支持M1/M2芯片 Mac 电脑的远程控制软件

M1和M1芯片的Mac电脑现在越来越多了。M1和M2的强大性能,让使用者们办公、娱乐如虎添翼。 M1 芯片于2020年11月11日推出,是Apple 首款专为Mac打造的芯片,拥有格外出色的性能、众多的功能,以及令人惊叹的能效表现。M1 也是Apple 首款…

Docker搭建MySQL主主模式+Keepalived实现高可用集群

1.环境准备: 系统版本 Centos7 IP:10.10.11.79 master IP:10.10.11.80 backup 虚拟ip:10.10.11.82 Docker环境: centos7离线安装docker,docker-compose keepalived安装包: https://www.k…

设计模式之原型模式与建造者模式详解和应用

目录1 原型模式1.1 原型模式定义1.2 原型模式的应用场景1.3 原型模式的通用写法(浅拷贝)1.4 使用序列化实现深度克隆1.5 克隆破坏单例模式1.6 原型模式在源码中的应用1.7 原型模式的优缺点1.8 总结2 建造者模式2.1 建造者模式定义2.2 建造者模式的应用场…

自动化测试基础概念

前端自动化测试相关概念(单元测试、集成测试、E2E 测试、快照测试、测试覆盖率、TDD 以及 BDD 等内容),以及测试框架 Jest 的讲解,Vue.js 应用测试,React 应用测试,E2E 测试,Node.js 应用测试等…

操作系统(三):内存管理,分页地址映射,页面置换算法LRU,NRU,FIFO,第二次机会算法和时钟算法

文章目录一、虚拟内存二、分页系统地址映射三、页面置换算法最佳置换算法LRU 最近最久未使用算法NRU 最近未使用FIFO 先进先出第二次机会算法时钟算法四、内存分段五、段页式六、分页和分段的比较一、虚拟内存 虚拟内存的目的是为了让无力内存扩充成更大的逻辑内存&#xff0c…

手工测试怎样找到第一份自动化测试的工作?

你会手工测试了,那么准备再找自动化测试的工作,相对于什么都不懂的小白来说优势很大。要找自动化测试的工作,首先你要会自动化测试,你要会编程,能写自动化测试脚本的语言有很多,你可以自己选择一门&#xf…

求职笔记记录

求职笔记记录目录概述需求:设计思路实现思路分析1.面试过程参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.…

tofu:一款功能强大的模块化Windows文件系统安全测试工具

关于tofu tofu是一款功能强大的针对Windows文件系统安全的模块化工具,该工具可以使用离线方法对目标Windows文件系统进行渗透测试,并通过绕过Windows系统登录界面来帮助广大研究人员测试Windows主机的安全性。除此之外,该工具还可以执行哈希…

Python学习笔记 --- 初识Python

编译器和解释器 概念: 可以把编译器和解释器理解成是人与计算机之间的 “翻译”,将代码翻译成计算机能够识别的指令。 编译器:全文翻译,拿到代码会将其编译成一个计算机能够识别的临时文件,再把文件交给操作系统读取…

SpringMVC(3)

通过上面的学习我们知道,默认情况下无论是Spring MVC还是SpringBoot返回的都是现在都是前后端分离的,后端只需要进行返回数据给前端数据即可 1)向浏览器返回一个HTML界面 请求参数的数据类型Contnt-Type:text/html;charsetutf-8 RequestMapp…

Linux centos、麒麟V10 安装redis

目录 1、下载redis安装包 2、将下载后的.tar.gz压缩包上传到到服务器自定义文件夹下 3、 解压文件 4、安装redis 5、配置redis.conf 6、启动redis 1、下载redis安装包 Redis各版本下载:https://download.redis.io/releases/ 2、将下载后的.tar.gz压缩包上传到…

用主动游泳的三维水母模型量化美杜莎的(medusan)机械空间的性能(二)(2017)

文章目录用主动游泳的三维水母模型量化美杜莎的(medusan)机械空间的性能(二)(2017)原文链接:https://doi.org/10.1017/jfm.2017.3结果3.1 参考案例的游泳动力学3.2 改变钟的主动和被动材料属性3.2.1 改变施加的张力3.2…

【并发编程】【1】概览

并发编程 1. 概览 1.1 这门课讲什么 这门课中的【并发】一词涵盖了在Java平台上的 进程线程并发并行 以及Java并发工具,并发问题以及解决方案,同时也会包含一些其他领域的开发 1.2 为什么学这么课程 我工作中用不到并发啊? 1.3 课程特…