前言
由于Node.js中的内置模块仅提供了一些底层的API,导致在基于内置模块进行项目开发时,效率很低,为了提供更高级、方便的API,极大的提高开发效率,于是引入了包的概念。包和内置模块的关系就类似于jQuery和浏览器内置API之间的关系
一、包是什么?
不同于Node.js中的内置模块和自定义模块,包是由第三方个人或者团队开发出来的,免费供所有人使用,且包都是免费和开源的,不需要付费即可下载使用
二、规范的包结构
1.包必须以单独的目录而存在
2.包的顶级目录下必须包含package.json这个包管理配置文件
3.package.json中必须包含name, version,main这三个属性,分别代表包的名字、版本号、包的入口
三、开发包的步骤(例如开发一个格式化时间的包)
1.新建一个itTime(包名)文件夹,作为包的根目录
2.在itTime文件夹中,新建如下几个文件以及文件夹:
package.json(包管理配置文件,可在终端里有 npm init -y 命令自动生成)
index.js(包的入口文件)
README.md(包的说明文档)
src(文件夹中包含dateFormat.js文件和htmlEscape.js文件)
dateFormat模块用于存放格式化时间的功能
htmlEscape模块用于存放处理HTML字符串的功能
3.初始化 package.json
配置文件
//package.json
{
"name": "flightloong-tools",
"version": "1.0.0",
"description": "提供格式化时间、HTMLEscape相关功能",
"main": "index.js",
"keywords": [
"itcast",
"itheima",
"dateFormat",
"escape"
],
"license": "ISC",
"dependencies": {
"moment": "^2.29.1"
}
}
4.在dateFormat中定义格式化时间的函数
// dateFormat.js
// 定义格式化时间的函数
function dateFormat(dateStr) {
const dt = new Date(dateStr)
const y = padZero(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
}
5.在htmlEscape.js中定义转义html字符串的函数
// htmlEscape.js
// 定义转义 HTML 字符的函数
function htmlEscape(htmlstr) {
return htmlstr.replace(/<|>|"|&/g, match => {
switch (match) {
case '<':
return '&glt;'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
// 定义还原 HTML 字符的函数
function htmlUnEscape(str) {
return str.replace(/&glt;|>|"|&/g, (match) => {
switch (match) {
case '&glt;':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
//向外提高模块化里的内容
module.exports = {
htmlEscape,
htmlUnEscape
}
6.在index.js中导入dateFormat.js模块和htmlUnEscape.js模块
//index.js
//导入模块
const date = require('./scr/dateFormat')
const escape = require('./scr/htmlEscape')
//向外提高模块化里的内容
module.exports = {
...date,
...escape
}
7.编写包的说明文档(md文档格式)
###安装
```
npm i itTime
```
##导入
```js
const itTime = require('itTime')
```
##格式化时间
```js
//调用deteFormat 对时间进行格式化
const dtStr = itTime.dateFormat(new Date())
//结果位当前时间 例如 2021-52-05 15:51:18
console.log(dtStr);
## 转义 HTML 中的特殊字符
```js
// 带转换的 HTML 字符串
const htmlStr = '<h1 title="abc">这是h1标签<span>123 </span></h1>'
// 调用 htmlEscape 方法进行转换
const str = itTime.htmlEscape(htmlStr)
// 转换的结果 <h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>
console.log(str)
```
## 还原 HTML 中的特殊字符
```js
// 待还原的 HTML 字符串
const str2 = itTime.htmlUnEscape(str)
// 输出的结果 <h1 title="abc">这是h1标签<span>123 </span></h1>
console.log(str2)
```
## 开源协议
ISC
8.将包发布到npm上
将终端切换到包的根目录下之后,运行npm publish 命令,即可将包发布到npm上(注意包名不能与npm上已有的包同名)