Node.js 模块化(二) 开发包/模块加载机制

news2024/10/1 17:40:06

1. 开发属于自己的包

1. 需要实现的功能

2. 初始化包的基本结构

 

3. 初始化 package.json

属性:

name:包的名称(不能重复,在官网检索一下,避免重复)

version:版本号

main:入口文件(外界在使用require导入这个包时,导入的就是main指向的文件)

description:简短的描述信息

 keywords:搜索的关键字(数组里面每一个属性都是一个字符串)

license:这个包遵循的开源许可协议

4. 在 index.js 中定义格式化时间的方法

  

5. 在 index.js 中定义转义 HTML 的方法

g代表全局匹配(从前到后把所有符合条件的项都匹配,|代表或者);

/<|>|"|&/g是正则表达式

 

6. 在 index.js 中定义还原 HTML 的方法

7. 将不同的功能进行模块化拆分

 

// 定义格式化时间的函数 dateFormat.js
function dateFormat(dateStr) {
  const dt = new Date(dateStr)

  const y = dt.getFullYear()
  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
}
// 将处理 HTML 字符串的功能,拆分到 src -> htmlEscape.js 中
//定义转义 HTML 字符的函数
function htmlEscape(htmlstr) {
  return htmlstr.replace(/<|>|"|&/g, match => {
    switch (match) {
      case '<':
        return '&lt;'
      case '>':
        return '&gt;'
      case '"':
        return '&quot;'
      case '&':
        return '&amp;'
    }
  })
}

// 定义还原 HTML 字符串的函数
function htmlUnEscape(str) {
  return str.replace(/&lt;|&gt;|&quot;|&amp;/g, match => {
    switch (match) {
      case '&lt;':
        return '<'
      case '&gt;':
        return '>'
      case '&quot;':
        return '"'
      case '&amp;':
        return '&'
    }
  })
}

module.exports = {
  htmlEscape,
  htmlUnEscape
}
// 这是包的入口文件index.js

const date = require('./src/dateFormat')
const escape = require('./src/htmlEscape')

// 向外暴露需要的成员
module.exports = {
  //...是展开运算符,
  //把这个对象中每个属性展开了交给module.exports这个对象进行存储
  ...date,
  ...escape
}
//测试文件
const itheima = require('./itheima-tools')

// 格式化时间的功能
const dtStr = itheima.dateFormat(new Date())
console.log(dtStr)
console.log('-----------')

const htmlStr = '<h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>'
const str = itheima.htmlEscape(htmlStr)
console.log(str)
console.log('-----------')

const str2 = itheima.htmlUnEscape(str)
console.log(str2)

8. 编写包的说明文档

## 安装
```
npm install itheima-tools
```

## 导入
```js
const itheima = require('itheima-tools')
```

## 格式化时间
```js
// 调用 dateFormat 对时间进行格式化
const dtStr = itheima.dateFormat(new Date())
// 结果  2020-04-03 17:20:58
console.log(dtStr)
```

## 转义 HTML 中的特殊字符
```js
// 带转换的 HTML 字符串
const htmlStr = '<h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>'
// 调用 htmlEscape 方法进行转换
const str = itheima.htmlEscape(htmlStr)
// 转换的结果 &lt;h1 title=&quot;abc&quot;&gt;这是h1标签&lt;span&gt;123&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;
console.log(str)
```

## 还原 HTML 中的特殊字符
```js
// 待还原的 HTML 字符串
const str2 = itheima.htmlUnEscape(str)
// 输出的结果 <h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>
console.log(str2)
```

## 开源协议
ISC

2 发布包

1. 注册 npm 账号

2. 登录 npm 账号

3. 把包发布到 npm 上

第一步:cd:到项目的根目录,再npm publish

4. 删除已发布的包

3. 模块的加载机制

3.1 优先从缓存中加载

3.2 内置模块的加载机制

3.3 自定义模块的加载机制

3.4 第三方模块的加载机制

3.5 目录作为模块

在json里面不能使用单引号,必须使用双引号

通过require加载一个文件夹的时候:如下

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

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

相关文章

如何下载并生成等高线

如何下载并生成等高线 发布时间&#xff1a;2018-01-17 版权&#xff1a; 同步视频教程&#xff1a;下载高程等高线使用视频教程-Bigemap GIS Office 专题地图制作视频教程&#xff1a;地图数据应用&#xff08;制作地图效果的基本过程&#xff09;-Bigemap GIS Office 视频…

【vue】关于路由的使用

&#xff08;1&#xff09;路由步骤 根据官方的文档&#xff0c;我们的路由大概需要以下的几种构成 &#xff08;1&#xff09;首先引入组件 &#xff08;2&#xff09;创建routes布局 &#xff08;3&#xff09;创建router对象 &#xff08;4&#xff09;抛出 &#xff0…

最长公共子序列

最长公共子序列一、题目二、思路1、状态转移方程&#xff08;1&#xff09;状态表示&#xff08;2&#xff09;状态转移2、循环设计三、代码一、题目 二、思路 这道题是一个很经典的DP问题&#xff0c;那么我们来看一下如何分析。 DP问题我们需要考虑两个问题&#xff1a;第一…

【Javassist】快速入门系列11 当检测到显示类型转换时用代码块替换

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 05 当有指定方法调用时替换方法调用的内容 06 当有构造方法调用时替换方法调用的内容 07 当检测到字段被访问时使用语…

深度剖析钓鱼网站域名识别工具dnstwist

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

漫途设备远程运维平台在制造业中的应用!

我国正处于从制造大国向制造强国迈进的关键时期&#xff0c;制造业的数字化、网络化、智能化以及绿色制造体系&#xff08;双碳为代表&#xff09;的打造事关制造业全局&#xff0c;是制造业高质量、可持续发展的关键与重要着力点。而设备智能运维是智能制造行业的短板。 存在以…

回归童年的美好 守住童年的回忆 那些年你玩过的游戏都有呢

时过迁境&#xff0c;曾经与我们一同玩耍的发小、同学&#xff0c;也因为工作、家庭原因早已各奔东西不在自己的身边。 还依稀记得孩童时期和小伙伴们一同蹲在大头电视前&#xff0c;快乐的玩着红白机的魂斗罗、超级玛丽还有炸弹人。稍微长大后&#xff0c;家里有了大头显示器…

ArcGIS基础实验操作100例--实验19按值修改栅格值

本实验专栏来自于汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 基础编辑篇--实验19 按值修改栅格值 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1&am…

Winsock套接字开发网络聊天室实例(C/S)模式

聊天室的基本要求 聊天器采用客户端/服务器&#xff08;C/S&#xff09;模式&#xff1b; 1&#xff0c;客户端利用UDP与服务器连接&#xff0c;客户端与客户端之间通过UDP互相通讯&#xff1b; 2&#xff0c;服务器端具有服务器端口设置&#xff0c;维护客户端个人信息&#…

SQL INNER JOIN:内连接

INNER JOIN 是 SQL 中最重要、最常用的表连接形式&#xff0c;只有当连接的两个或者多个表中都存在满足条件的记录时&#xff0c;才返回行。 SQL INNER JOIN 子句将 table1 和 table2 中的每一条记录进行比较&#xff0c;以找到满足条件的所有记录&#xff0c;然后将每一对满足…

YGG 公会发展计划(GAP)第二季总结

Yield Guild Games&#xff08;YGG&#xff09;正在结束其公会发展计划&#xff08;GAP&#xff09;的第二季&#xff0c;这是一个成就驱动的社区代币分配协议&#xff0c;奖励 YGG 成员通过优质贡献为公会提供价值。 第二季的 GAP 包括 117 个任务式的「成就」&#xff0c;为了…

有向图的概念和java代码实现

有向图定义 有向图是一副具有方向性的图&#xff0c;是由一组顶点和一组有方向的边组成的&#xff0c;每条方向的边都连着一对有序的顶点。 出度&#xff1a; 由某个顶点指出的边的个数称为该顶点的出度。 入度&#xff1a; 指向某个顶点的边的个数称为该顶点的入度。 有向路径…

重学redux之Redux Toolkit(四)

更新第四篇了,这篇是最终篇,没有基础的最好看看前几篇,篇幅有限,更多的是一个指导,如果有不清楚的地方,可评论区留言(最好自己找度娘问问),引用官方说话,先来了解一下 redux toolkit 是什么东西 Redux Toolkit 是什么? Redux Toolkit 是 Redux 官方强烈推荐,开箱…

用JavaScript实现网页雪花飘落特效

不知道大家有没有看到过别人的网页有雪花飘落的特效&#xff0c;我当时看到真的觉得好好看&#xff0c;于是乎就去借鉴别人做的特效代码&#xff0c;最终将这个特效成功放到自己做的网页上啦~代码放到下面啦&#xff0c;可以自己设置颜色&#xff0c;雪花形状的大小&#xff0c…

新政策|“信息科技”独立设置为新科目

近日&#xff0c;教育部印发义务教育课程方案和语文等16个课程标准(2022年版)。今天&#xff0c;教育部召开新闻发布会&#xff0c;介绍《义务教育课程方案和课程标准&#xff08;2022年版&#xff09;》。 教育部教材局局长田慧生表示&#xff0c;现行义务教育课程方案和课程…

Eth 02 -MAC如何访问PHY

文章目录 1 MII接口概述2 MDIO clause 223 MDIO Clause 45传送门 ==>> AutoSAR入门和实战系列总目录 1 MII接口概述 我们在【Eth 01 - Eth以太网控制器驱动概述和API讲解】已经提到了两个接口:MAC通过MII接口访问PHY芯片。 void Eth_WriteMii(uint8 CtrlIdx, uint8 T…

第二十三讲:神州路由器OSPF多区域路由的配置

实验拓扑图如下所示 操作步骤&#xff1a; 步骤1&#xff1a;连接网络拓扑图。 步骤2&#xff1a;设置计算机的IP地址、子网掩码和网关。 步骤3&#xff1a;配置Router-A的名称及其接口IP地址。 Router_config#hostname Router-A Router-A_config#int fa0/0 Router-A_con…

【HTML】再见2022!一起来写一个响应式跨年倒计时吧(附源码)

&#x1f482;作者简介&#xff1a; THUNDER王&#xff0c;一名热爱财税和SAP ABAP编程以及热爱分享的博主。目前于江西师范大学会计学专业大二本科在读&#xff0c;同时任汉硕云&#xff08;广东&#xff09;科技有限公司ABAP开发顾问。在学习工作中&#xff0c;我通常使用偏后…

excel排序求和:如何统计前几名数据合计 上篇

什么叫做统计前几名合计呢&#xff1f;先看看动画演示吧&#xff1a; 可以看到&#xff0c;数据按照销售数量从高往低排列&#xff0c;选择一个名次&#xff0c;就可以对前几名的销售数量求和。 这类问题在很多与数字排名有关的情况下都用得上&#xff0c;例如对前几名考试成绩…

GitFlow工作流

1.背景介绍 什么是Git工作流&#xff1f; Git工作流你可以理解为工作中团队成员遵守的一种代码管理方案&#xff0c;在Git中有以下几种工作流方案作为方案指导。 1、集中式工作流 2、功能分支工作流 3、Gitflow工作流 4、Forking工作流 2.知识剖析 1、集中式工作流 这…