【Node.js】模块化学习

news2024/12/19 12:40:31



Node.js教学 专栏 从头开始学习

 

目录

模块化的基本概念

        什么是模块化

                现实中的模块化

                编程领域中的模块化

        模块化规范 

Node.js中的模块化

        Node.js中模块的分类

         加载模块

        Node.js中的模块作用域

                什么是模块作用域

                模块作用域好处

       

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

                module对象

                 module.exports对象

                 共享成员的注意点

                exports对象

                 exports和module.exports的适用误区

         Node.js中的模块化规范


模块化的基本概念

        什么是模块化

                现实中的模块化

 小霸王游戏机就是模块化,游戏卡带 以及机器都是模块,模块化可以方便我们更换不同的游戏卡带,如果游戏机不是模块化的话,那么我们每次换游戏都需要重新购买游戏机了,模块化更能满足我们的需求。

                编程领域中的模块化

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

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

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

        模块化规范 

模块化规范就是对代码进行模块化的拆分与组合。需要遵守的哪些规则。

例如

  • 使用什么样的语法格式来引用模块
  • 在模块中使用什么样的语法格式向外暴露成员

模块化规范的好处 :大家都遵守同样的模块化规范写代码。降低了沟通的成本,极大方便了各个模块之间的相互调用,利人利己。

Node.js中的模块化

        Node.js中模块的分类

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

  • 内置模块: 有官方提供的模块,如http,path等;
  • 自定义模块:用户创建的每个js文件,都是自定义模块
  • 第三方模块:并非官方提供的内置模块也不是自己定义的模块,而是第三方开发出来的模块,使用前需要下载

         加载模块

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

//加载内置的fs模块 
const fs = require('fs');
//加载自定义模块 写入路径导入自己写的js文件
const custom = require('路径');
//导入第三方模块
const moment = require('moment'); 

    注意:使用require()方法加载对应模块时,会自动执行被加载模块中的代码。

        Node.js中的模块作用域

                什么是模块作用域

和函数作用域类似,再自定义模块中定义的变量,方法等成员,只能在当前定义的模块内被访问,这种模块机别的访问限制,被叫做模块作用域,导入模块后 也不能使用模块内的函数等,

                模块作用域好处

防止了全局变量污染的问题,这个问题 我再之前的es6文章 let const var定义函数中说过。

       

//再01.js中书写相关内容
const extend = '123456';
console.log('加载模块');
//引用并打印 我们可以看看都获取了什么内容
const custom = require('./草稿/01.js');
console.log(custom);

 

一个导入模块自动执行的显示语句,和打印模块获取的空对象。 

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

                module对象

在每个js自定义模块中都有一个module对象,他里面存储了和当前模块有关的信息。

我们可以打印下module对象看看里面的内容

                 module.exports对象

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

//01.js
module.exports.extend = '123456';
//导入
const custom = require('./草稿/01.js');
console.log(custom);

                 共享成员的注意点

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

 

//曝光extend这个对象属性
//旧对象
module.exports.extend = '123456';
module.exports.say = function () {

}
//新对象
module.exports = {
    abc: '123',
    hel: function () {

    }
}
const custom = require('./草稿/01.js');
console.log(custom);

打印出新对象

                exports对象

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

                 exports和module.exports的适用误区

                

 

 

 

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

         Node.js中的模块化规范

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

CommonJS规定:

  1. 每个模块内部,module变量代表当前模块。
  2. module变量是一个对象,它的exports属性是对外的借口。
  3. 加载某个模块,其实是加载该模块的module.exports属性。

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

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

相关文章

第二站:分支与循环(终幕)一些经典的题目

目录 一、计算n的阶乘 1.一般解法 2.优化不能表示出较大数的阶乘 二、 计算 1!2!3!……10! 1.循环嵌套解法 2.一次循环解法(优化计算时间) 三、在一个有序数组中查找具体的某个数字n 1.遍历查找 2.二分查找算法(优化了查找时间) 四、编写代码&am…

IDEA Out of memory 问题

文章目录1. 前提2. 问题记录与解决方案1. 前提 阅读本文之前,读者要首先把 Out of memory 这个问题的解决方案多搜几个帖子,先按照其他帖子的解决方案(修改配置文件Xmx属性等)尝试一遍,不能解决再参考本文。 本文所描…

前端小游戏——植物大战僵尸

给大家分享一个植物大战僵尸网页游戏源代码,感兴趣的小伙伴可收藏学习 👉完整源码 文章目录⌛️效果展示⌛️游戏介绍⌛️游戏内容(1)冒险模式(2)小游戏⌛️图片资源⌛️代码展示(1)…

【黑猩猩算法】基于加权反对技术和贪婪搜索进化黑猩猩优化算法求解多模态工程问题附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

终于拿到了阿里P8架构师分享的JCF和JUC源码分析与实现笔记java岗

时代的一粒尘,落在每个人身上,就是一座山”。 时代更迭变换,我们好像都知道今天与昨天不同,又好像肉眼看不出哪里不同。 但其实它就正在以各种各样的方式体现在每一个普通人身上。 疫情爆发三个月的时间,截止2020年…

~外中断~

目录 一、接口芯片和端口 二、外中断信息 三、PC机键盘的处理过程 一、接口芯片和端口 外设的输出不直接送入内存和CPU,而是送入相关的接口芯片的端口中;CPU向外设的输出也不是直接送入外设,而是先送入端口,再由相关的芯片送到…

C语言程序设计--火车订票系统

任务要求: 创建一个火车票管理系统,功能包括: (1)录入班次信息(信息用文件保存),可不定时地增加班次数据 (2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班 次的发车时间,则…

js中map()的使用详解

引入: 有网友有如下困惑: map是数组的方法,有一个参数,参数是一个函数,函数中有3个参数 参数1:item必须。当前元素的值 参数2:index,可选。当前元素在数组中的索引值 参数3&#xff…

CentOS 7迁移Anolis OS 7 ——筑梦之路

迁移注意事项 Anolis OS 7生态上和依赖管理上保持跟CentOS7.x兼容,一键式迁移脚本centos2anolis.py,实现CentOS7.x到Anolis OS 7的平滑迁移。 使用迁移脚本前需要注意如下事项: 迁移涉及到软件包的重新安装,是不可逆过程&#…

BBR/CUBIC 共存时的 buffer 挤兑

BBR 与 CUBIC 共存时的收敛图,理论情况: 理论上 BBR 不会挤占 buffer,inflight 保持为恒定的 BDP。 但 BBR 的 inflight 做不到恒定,多流共存时,依然会 “主动占用 buffer” 而相互挤兑带宽,而该行为是必须…

java - 序列化

钱应该怎么花 前几天看到一个新闻,一女子打拼了5年攒了30万买房钱,最后因为意外被一场突如其来的大火烧了,经过多家银行,长达4小时的鉴定,挽回了15万损失。 还看到一个新闻,老人攒5000元钱遭虫蛀烂&#…

「Linux」400行纯C语言代码带你「手撕线程池」

线程池的基本概念 不管线程池是什么东西!但是我们必须知道线程池被搞出来的目的就是:提高程序执行效率而设计出来的; 了解了线程池的目的后:我们就可以开始理解线程池: 首先回答一个问题:为什么会有线程…

python文件的读取

python文件的读取1.文件的读取1.read() 读取整个文件2.readline() 每次读取一行文件3. readlines() 读取文件的所有行2.文件的写入1.以"x"方式打开文件2.以"a"方式打开文件3.以"w"方式打开文件3.文件的删除4.Excel表数据的读取1.直接读取2.通过p…

SQL Server2019配置always on高可用图文步骤

准备工作 首先需要准备好Windows Server上的故障转移群集,步骤可以参考上一篇。 https://blog.csdn.net/u012869793/article/details/127560270?spm1001.2014.3001.5501 然后服务器上安装好SqlServer,我这里安装的是2019。 正文 勾选启用Always ON可…

牛客竞赛每日俩题 - Day7

目录 经典01背包问题 二叉树遍历与构造(考研重点) 经典01背包问题 求正数数组的最小不可组成和_百度笔试题_牛客网 参考大佬题解: 动态规划:01背包问题(无物品价值),思想相同,题目最终要求有些变化 min为…

【机器人定位引导中的机器视觉技术】

文章目录手眼标定原理手眼标定流程定位引导1、单相机抓取定位引导2、单相机纠偏定位引导3、上下相机对位引导随着工业生产中对自动化的要求越来越高,视觉技术已被广泛引入工业机器人行业,具备视觉的工业机器人能更快、更准、更灵活地完成定位抓取、对位组…

Linux系统 (三)- 权限介绍

~~~~前言命令行解释器 -- Command Line Interpreter ShellLinux操作系统命令行解释器对命令行解释器的初步认识命令行解释器的意义shell分类命令行解释器 CLI Shell图形界面 GUI ShellLinux权限Linux中用户分类su基本语法sudo基本语法配置操作权限管理权限是什么文件分类文件属…

【一起学数据结构与算法】计数排序、基数排序、桶排序(含菜鸟教程代码)

目录前言一、计数排序1.1 排序思想1.2 代码1.3 菜鸟教程官方代码(搬运)二、基数排序2.1 排序思想2.2 代码2.3 菜鸟教程官方代码(搬运)三、桶排序3.1 排序思想3.2 代码3.3 菜鸟教程官方代码(搬运)前言 之前我们学过了几种常见的排序,都是基于比较的排序,…

ES6中扩展对象的功能性

对象是JavaScript编程的核心,ECMAScript6为对象提供了许多简单易用且更加灵活的新特性。 ECMAScript 6在对象字面量的基础上做出了以下几个变更: 简化属性定义语法,使将当前作用域中的同名变量赋值给对象的语法更加简洁 function createPe…