模块化

news2024/11/26 1:34:18

一、目标

  • 能够说出模块化的好处
  • 能够知道CommonJS规定了哪些内容
  • 能够说出Node.js中模块的三大分类各自是什么
  • 能够使用npm管理包
  • 能够了解什么是规范的包结构
  • 能够了解模块的加载机制

二、目录

  • 模块化的基本概念
  • Node.js中模块的分类
  • npm与包
  • 模块的加载机制

1.模块化的基本概念

1.1什么是模块化

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

1.现实生活中的模块化

 2.编程领域中的模块化

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

 1.2模块化规范

 2.Node.js中的模块化

2.1Node.js中模块的分类

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

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

2.2加载模块

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

 注意:①使用require()方法加载其他模块时,会执行被加载模块中的代码。

②在使用require加载用户自定义模块期间,可以省略.js的后缀名

2.3Node.js中的模块作用域

1.什么是模块作用域

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

2.模块作用域的好处

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

1.module对象

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

2.module.exports对象

在自定义模块中,可以使用module.exports对象,将模块内的成员共享出去,供外界使用。

外界用require()方法导入自定义模块时,得到的就是module.exports所指的对象 

//在一个自定义模块中,默认情况下,module。exports={}
//向module.exports对象上挂栽username属性
module.exports.username = 'zs'
    //向module.exports对象上挂栽sayHello方法
module.exports.sayHello = function() {
    console.log('大家好,我是' + username)
}
//在外界使用require导入一个自定义模块的时候,得到的成员,
//就是那个模块中,通过module.exports指向的那个对象
const m1 = require('./06.mi')
console.log(m1)

3.共享成员时的注意点

 4.exports对象

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

 最终,向外共享的结果,永远都是module.exports所指向的对象

4.exports和module.exports的使用误区

时刻谨记,require()模块时,得到的永远是module.exports指向的对象:

如果给module.exports赋值一个新对象,则会以最后复制的新对象为主(因为module.export本身就是一个对象,赋值一个新对象覆盖了本身的对象);如果给module.export赋值一个属性,则会加入到本身对象里面;永远以module.export所赋值为主;

 

 

 

 注意:为了防止混乱,建议大家不要在同一个模块中同时使用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/584591.html

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

相关文章

spring源码解读

深入了解Spring Bean Java bean和spring bean区别 Java bean的属性私有,只能通过get和set方法来对属性进行操作。Spring bean是由spring容器生成和管理的对象。 spring Bean的定义方式 xml文件 。 声明式。 bean注解。 声明式。 component注解。声明式。 Bea…

房产中介APP开发功能有哪些?

房产中介APP开发功能有哪些? 1. 发布信息。中介或房东通过房地产中介APP客户端发布出租房屋的相关信息。 2. 房屋搜查。根据不同类型的房源进行分类,如公寓、整租、合租、写字楼、办公楼等,也可以根据不同的位置信息、商圈、距…

2023年下半年软考高级需要报班吗?

首先,对于软考高级考试报班与否的问题,需要根据自身的情况来做出决定。如果你有较强的自学能力,且具备丰富的实际工作经验和技术知识,那么不报班也完全可以自学备考。但如果你对软件工程的知识掌握程度较低,或者时间紧…

算法01-算法概念与描述

文章目录 总结大纲要求算法概念举个例子:量水问题 算法描述算法的时间复杂度 总结 本系列为C算法学习系列,会介绍 算法概念与描述,入门算法,基础算法,数值处理算法,排序算法,搜索算法&#xff…

软件测试炸了,作为从业者,你做好准备了吗?

软件测试行业已经发生很大变化,你跟上变化了吗? 岗位少不可怕,要求越来越高也不可怕,可怕的是,软件测试行业已经发生巨变,而你却原地踏步!目前一线大厂更多倾向于招收测试开发,或者…

06. 数据结构之散列表

前言 散列表也叫作哈希表(hash table),这种数据结构提供了键(Key)和值(Value)的映射关系。只要给出一个Key,就可以高效查找到它所匹配的Value,时间复杂度接近于O(1) 1.…

photoshop矫正扫描图片的倾斜问题以及修改图片内容

由于工程原因,资料需要重新梳理 1.扫描工程表格到电脑中 2.在ps中导入表格内容(表格有时候是倾斜的) 需要修正为正常状态,即垂直状态 设置步骤: 1.调整ps的背景颜色与所在图片的背景颜色一致 用吸管工具&#xff…

AbandonedConnectionCleanupThread$ConnectionFinalizerPhantomReference内存溢出

网上查了查资料,根据自己情况在这里整理了一下,供大家学习和参考。 目录 1、现象 2、mysql-connector-java 源码分析 3、解决方法 3.1、配置disableAbandonedConnectionCleanup 3.2、暴力解决方式-----定时GC 4、什么是虚引用 5、关联对象真的被回…

数据可视化:趋势类可视化图表大全

图表是处理数据的重要组成部分,因为它们是一种将大量数据压缩为易于理解的格式的方法。数据可视化可以让受众快速Get到重点。 数据可视化的图表类型极其丰富多样,而且每种都有不同的用例,通常,创建数据可视化最困难的部分是确定哪…

【Linux】常用命令的汇总学习

文章目录 1.目录切换命令2.目录操作命令3.把ls -l中包含字母file(不区分大小写)的内容输出4.统计txt中的某个字符串5.grep命令的使用6.linux查找当前目录下所有txt文件7.linux中的find命令8.查看系统所有的进程信息9.如何确定文件的类型10.tar解压缩11.U…

员工防范网络钓鱼攻击的10个实用技巧

你知道网络钓鱼攻击的危害吗?以下是网络钓鱼的定义及其引起关注的原因: Verizon 最近的一份报告显示,82%的网络漏洞均由人为因素造成,比如窃取凭证、网络钓鱼攻击、社会工程学、冒名顶替、滥用或错误等。网络钓鱼攻击…

惊!掌握千问通义的关键,从这些必知内容开始!

今年快过半了,要说顶流话题还得是ChatGPT,相关话题的热度居高不下,而其从GPT-3.5到GPT-4的升级,也让我们深刻了解了什么叫一代版本一代神,从GPT-3.5到GPT-4,真的就是一个跨阶级式的升级。 技术内涵 ChatGPT…

某SRC的渗透测试实战

前言 因为不甘心被称作会只点鼠标的猴子,所以开始了一次某SRC漏洞挖掘,为期一个多星期。文章有点长,但请耐心看完,记录了完整的SRC漏洞挖掘实战 渗透过程 因为选择的幸运儿没有对测试范围进行规划,所以此次范围就是…

OPC UA客户端访问 OPC DA服务器

目标 用OPC UA客户端(如UaExpert)读取OPC DA服务器上的点。 原理 OPC DA是基于COM/DCOM的,传统OPC DA客户端访问非本机OPC DA服务时需要配置DCOM。OPC UA客户端无法直接访问 OPC DA服务,需要将OPC DA服务映射为OPC UA服务&#x…

【Excel技巧】3个限制权限,保护表格不被人随意改动

Excel表格是很多人工作中经常用到的办公软件,有时候做好表格发给对方后,总是担心会被不小心做了改动。 如果有这种顾虑,就一定要用上Excel表格的3个“限制权限”,可以根据不同的情况,设置不同保护。下面就来看看可以设…

LAMP配置安装

目录 一:LAMP 1、(平台)Linux 2、(前台)Apache 3、(后台)MySQL 4、(中间连接)PHP/Perl/Python 5. Lamp工作原理 二:编译安装Apache httpd服务 1.关闭防火墙,将安装Apache所需软件包传到/opt目录下 2.安装环境依赖包 3.配置软件模块…

打造繁荣社区:Solaris 与 Web3 合作的力量

在去中心化金融(DeFi)的动态格局中,Solaris 作为一股开创性力量涌现,为衍生品提供了强大的 Web3 基础设施。Solaris 成功的关键在于其充满活力且迅速增长的社区,该社区在塑造平台影响力和促进创新方面发挥着关键作用。…

C++ 新特性

1.auto、decltype 用于自动推断类型 2.自动追踪返回值类型 3. 列表初始化和列表方式类型收窄 //列表初始化 vector<int>res{1,2,3,4,5}; //防止类型收窄 int a 1024; char b a;//可以执行 char b{a};//报错 4.基于范围的for循环 vector<int>res{1,2,3,4}; fo…

“外行转网工,我只用了三个月”

大家好&#xff0c;我是老杨。 在这行发展了这么多年&#xff0c;经常会有人来问我&#xff0c;网工该怎么提升自己&#xff0c;又或是怎么入行。 其实这事儿不难想&#xff0c;技术工种最需要做的是什么&#xff0c;自然是提升技术。 而技术提升&#xff0c;途径也只有学习…

k维空间中的超平面的维度是多少?

超平面中的任何点 x x x可以用一个法向量 w w w和超平面上的一个点 x 0 x_0 x0​表示. x x x可以用 w w w和 x 0 x_0 x0​表示&#xff1a; ( x − x 0 ) ⋅ w 0 w T x − w T x 0 0 w T x b 0 \begin{split} (x-x_0) \cdot w &0 \\ w^Tx-w^Tx_0 &0 \\ w^Txb &a…