Node.js——模块化(一)

news2024/12/23 15:39:25

1. 模块化的基本概念

1.1 什么是模块化

 1. 编程领域中的模块化

 1.2 模块化规范

2. Node.js 中的模块化

2.1 Node.js 中模块的分类

2.2 加载模块

加载自定义模块给相对路径 ./是平级(同一文件夹下调用)

//这是07.test.js代码
// 注意:在使用 require 加载用户自定义模块期间,
// 可以省略 .js 的后缀名
const m1 = require('./06.m1.js')
console.log(m1)


//这是06.m1.js代码
// 当前这个文件,就是一个用户自定义模块
console.log('加载了06这个用户自定义模块')

2.3 Node.js 中的模块作用域

1. 什么是模块作用域

‘01中定义的变量方法(成员),就算在02中导入了01模块,里面的方法变量也拿不到

成员默认只能在内部被访问:模块级别的访问限制叫模块作用域

2. 模块作用域的好处

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

1. module 对象

 通过exports共享成员,让模块内的成员可以被外界访问到

2. module.exports 对象

module.exports默认指向为空对象 

3. 共享成员时的注意点

最后又定义了新对象,module.exports指向新对象

//11.自定义模块.js
// 在一个自定义模块中,默认情况下,
// module.exports = {}空对象

const age = 20

// 向 module.exports 对象上挂载 username 属性
module.exports.username = 'zs'
// 向 module.exports 对象上挂载 sayHello 方法
module.exports.sayHello = function() {
  console.log('Hello!')
}
//把age挂载出去了
module.exports.age = age

// 让 module.exports 指向一个全新的对象
module.exports = {
  nickname: '小黑',
  sayHi() {
    console.log('Hi!')
  }
}

//12.test.js
// 在外界使用 require 导入一个自定义模块的时候,得到的成员,
// 就是 那个模块中,通过 module.exports 指向的那个对象,
//默认为空对象
const m = require('./11.自定义模块')

console.log(m)

4. exports 对象

// console.log(exports)
// console.log(module.exports)

// console.log(exports === module.exports)
//true 两个指向同一个对象
const username = 'zs'

module.exports.username = username
exports.age = 20
exports.sayHello = function() {
  console.log('大家好!')
}

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

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

2.5 Node.js 中的模块化规范

3. npm与包

3.1 包

1. 什么是包

2. 包的来源

3. 为什么需要包

4. 从哪里下载包

5. 如何下载包

3.2 npm 初体验

1. 格式化时间的传统做法

    //15.dateFormat.js
// 1. 定义格式化时间的方法
function dateFormat(dtStr) {
  const dt = new Date(dtStr)

  const y = dt.getFullYear()
  //月份是0-11,要加个1
  const m = padZero(dt.getMonth() + 1)
  const d = padZero(dt.getDate())

  const hh = padZero(dt.getHours())
  const mm = padZero(dt.getMinutes())
  const ss = padZero(dt.getSeconds())

  return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}

// 定义补零的函数
function padZero(n) {
  return n > 9 ? n : '0' + n
}
//向外暴露一个对象
module.exports = {
  dateFormat
}

//16.test.js
// 导入自定义的格式化时间的模块
const TIME = require('./15.dateFormat')

// 调用方法,进行时间的格式化
   //创建时间的对象
const dt = new Date()
// console.log(dt)
const newDT = TIME.dateFormat(dt)
console.log(newDT)

2. 格式化时间的高级做法

3. 在项目中安装包的命令

访问npmjs.com网页,查询用法

// 1. 导入需要的包,包名称必须写成字符串
// 注意:导入的名称,就是装包时候的名称
const moment = require('moment')

const dt = moment().format('YYYY-MM-DD HH:mm:ss')
console.log(dt)

4. 初次装包后多了哪些文件

5. 安装指定版本的包

6. 包的语义化版本规范

3.3 包管理配置文件

1. 多人协作的问题

只需要上传源代码就行

2. 如何记录项目中安装了哪些包

3. 快速创建 package.json

新建项目的文件夹以后第一件事就是执行这行代码,且项目开发期间只需要执行一次

4. dependencies 节点

5. 一次性安装所有的包

解决方案:还有package.json

6. 卸载包

7. devDependencies 节点

3.4 解决下包速度慢的问题

1. 为什么下包速度慢

2. 淘宝 NPM 镜像服务器

3. 切换 npm 的下包镜像源

4. nrm

3.5 包的分类

1. 项目包

2. 全局包

3. i5ting_toc

3.6 规范的包结构

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

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

相关文章

Cypress笔记-连接命令

.each() 作用 遍历数组数据结构(具有 length 属性的数组或对象) cy.get(.connectors-each-ul>li).each(function($el, index, $list){ //遍历每个li元素console.log($el, index, $list)}).its() 作用 获取对象的属性值 示例代码 cy.get(.conne…

MergeTree概述

概述 Clickhouse 中最强大的表引擎当属 MergeTree (合并树)引擎及该系列(MergeTree)中的其他引擎。MergeTree 系列的引擎被设计用于插入极大量的数据到一张表当中,数据可以以数据片段的形式一个接着一个的快速写入&am…

DonkeyCar [02] - 软件配置 - 上位机(windows)

前言:在windows下配置Donkey Car的上位机: 1 安装miniconda Python Conda是开源的管理系统,Miniconda是conda的开源最小安装。 Donkey的默认安装版本,3.7,Miniconda已经是 最新的版本,是3.10.8吧&#xf…

IB如何选科更有助于大学申请?

如果你准准备选择就读IB课程体系,IB选科颇为重要的,选课对于提升自己的竞争力是非常重要的,可以说合理的选课,是申请外国大学的奠基石。IB课程不同于其他两种课程体系,它并不以某个国家的课程体系为基础,而…

02、Java 数据结构:时间复杂度与空间复杂度

时间复杂度与空间复杂度1 场景理解1.1 场景11.2 场景21.3 场景31.4 场景41.5 代码实现2 时间复杂度2.1 渐进时间复杂度2.2 从基本操作执行次数推导出时间复杂度2.3 两种方法来计算2.4 四个场景的时间复杂度分析2.5 大 O 表达式的优劣3 空间复杂度4 时间复杂度和空间按复杂度关系…

《计算机网络》——第四章知识点

第四章思维导图如下; 网络层向上只提供灵活的、无连接的、尽最大努力交付的数据报服务,主要任务是把分组(IP数据报)从通过路由选择与转发从源端传到目的端,为分组交换网上的不同主机提供通信服务。 互联网可以由多种异构网络互连…

基于Shell编程完成定时备份数据库,看这篇就够了

一. 前言 最近文哥班里有一个学员面试成功上岸,在公司开发时遇到了这么一个需求:领导要求他编写一个shell脚本,完成定时备份数据库的需求。由于他对linux以及shell编程不是很了解,这位学员感到束手无策,于是就求助文哥…

List的介绍

目录 1.什么是List 2.常见接口介绍 3.List 1.什么是List 在集合框架中,List是一个接口,继承自Collection。Collection也是一个接口,该接口规范了后续容器中常用的一些方法,具体如下所示 Iterable也是一个接口,表示实…

ArcGIS基础实验操作100例--实验11以线要素分割面要素(一)

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台:ArcGIS 10.6 实验数据:请访问实验1(传送门) 基础编辑篇--实验11 以线要素分割面要素(一) 目录 一、实验背景 二、实验数据 …

今年十八,蓝桥速刷(Python-I)

前言 🍀作者简介:被吉师散养、喜欢前端、学过后端、练过CTF、玩过DOS、不喜欢java的不知名学生。 🍁个人主页:红中 🍂专栏地址:python专栏 抽根烟先 蓝桥杯是个啥 蓝桥杯,又称圈钱杯(不是 是由…

MySQL数据库调优

MySQL数据库调优一、MySQL架构设计1.1、引言1.2、MySQL Server层1.2.1、连接器(Connector)1.2.2、查询缓存 (Query Cache)1.2.3、分析器(Analyzer)1.2.4、优化器(optimizer)1.2.5、执…

Qt5操作Office及Word读写实例

欢迎小伙伴的点评✨✨,相互学习🚀🚀🚀 博主🧑🧑 本着开源的精神交流Qt开发的经验、将持续更新续章,为社区贡献博主自身的开源精神👩‍🚀 文章目录前言一、Qt操作Office的…

云超融合数据中心 CloudFabric

大家好,我是技福的小咖老师。 随着云计算、大数据、人工智能等新一代信息技术的快速发展,数字技术已经渗透到我们日常生活的方方面面,同时也改变了所有行业。数据中心,将算力源源不断地输送给数字世界,逐渐成为云计算…

Flink学习28:水位线

1.前言 flink有3种时间,主要是事件时间和处理时间。 水位线主要解决,数据乱序到达或者延迟到达的问题 2.水位线原理 即只有当水位线,越过窗口的结束时间,才会触发窗口计算。 窗口计算需要同时满足两个条件: 1.水位线…

spring之IoC注解

文章目录前言一、回顾注解1、注解怎么定义2、注解怎么使用3、通过反射机制怎么读取注解二、Spring IoC注解式开发原理1、扫描程序2、通过反射机制解析注解3、实例化对象三、声明Bean的注解前言 注解的存在主要是为了简化XML的配置 一、回顾注解 1、注解怎么定义 定义一个注解…

c语言操作符(上)

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>: 讲解c语言中有关操作符的知识. 金句分享: 最慢的步伐…

Python读取sqlite3数据库中的数据

文章目录1. 简介1.1. 使用1.1.1. 创建1.1.2. 插入1.1.2.1. 插入一条数据1.1.3. 查询1.1.3.1. 查询所有数据查询一条数据1.1.3.2. 读取特定位置的数据1.1.4. 修改数据1.1.5. 删除数据1. 简介 从Python3.x版本开始,在标准库中已经内置了SQLlite3模块,它可…

Redis中的哨兵机制

有了主从复制的实现以后,我们如果想对主从服务器进行监控,那么在redis2.6以后提供了一个 “哨兵” 的机制,在2.6版本中的哨兵为1.0版本,并不稳定,会出现各种各样的向题,在2.8以后的版本哨兵功能才稳定起来。 顾名思义,哨兵的含义就是监控Redis系统的运行状况。其主要功…

STM32/51单片机实训day6——Proteus8.6版本+ STM32F103驱动LCD12864显示Keil5程序设计

内 容:实现LCD显示 学 时:4学时 知识点:LCD12864芯片介绍,读写操作时序,电路设计 重点: 读写操作时序 难点:读写操作时序 时间:2022年12月26日 9:00~11:50 总结&…

全国产龙芯2K0500多功能SoC处理器及其解决方案

龙芯2K0500片内集成单个64位龙架构(LoongArch)LA264处理器核、32KB一级指令缓存、32KB一级数据缓存、512KB二级缓存、32位DDR2/3-1066控制器、2DGPU图形核心、DVO显示接口、两路PCIe2.0、两路SATA2.0、四路USB2.0、一路USB3.0、两路GMAC、PCI总线、彩色黑白打印接口、HDA及其他…