首先明确你需要开发包的功能:
例如:需要实现的功能
- 格式化日期
- 转义HTML中的特殊字符——防止在用户在提交表单中使用html标签
- 还原HTML中的特殊字符
新建文件夹,作为包的根目录
在根文件中新建3个文件:
- package.json——包管理配置文件--版本信息、等
- index.js——包的入口文件--实际用户导入的文件
- README.md——包的说明文档
package.json包管理配置文件中的内容
name——表示我们包的名称(不能重复 要进行检索),在别人使用npm下载时候使用,去官网进行检查看你取的名字有没有被占用
version——默认初始时1.0.0开始
main——指定包的入口文件,外界使用require导入包的时候使用的是main属性来指定包的入口
description——描述信息,在用户在官网中搜索包的时候,就会出现的提示信息
keywords——关键字,里面保存的是数组,数组里面的每个内容都是字符串,可以自定义
license——协议 ISC是开源许可协议,当然还有很多的协议,大家可以自行查找npm的协议
{
"name": "zjj",
"version": "1.0.0",
"main": "index.js",
"description": "格式化日期\\转义HTML中的特殊字符\\还原HTML中的特殊字符",
"keywords": ["z","zj","zjj"],
"license": "ISC"
}
开始写格式化时间的函数index.js——功能一
//这是包的入口文件
//定义格式化时间的函数
function dateFormat(DateStr){//定义方法 接收时间的字符串
const dt=new Date(DateStr);
const y=dt.getFullYear();//年 月
const m=padZero(dt.getMonth()+1);//getMonth输出的是0-11的月份,对应的要进行相加
const d=padZero(dt.getDate());//
const h=padZero(dt.getHours());
const min=padZero(dt.getMinutes());
const s=padZero(dt.getSeconds());
return `格式化时间:${y}-${m}-${d} ${h}:${min}:${s}`
}
//定义补零的函数
function padZero(n){//接收数字n
return n>9 ? n : '0'+ n;//时间=1-01
}
//向外暴露需要的成员
module.exports={
dateFormat//将方法导出
}
之后进行 require导入模块测试-
当require直接导入文件夹的时候也直接显示,不需要完整路径是为什么,是因为当require导入的时候没有具体文件,require就会查找目录中有木有package.json包管理配置文件,有了就会去查找有没有指定main属性,就会查找main属性导入文件夹下的文件
定义转义html的方法——功能二
传入htm字符串 将对应的html标签转换成为对应的输出
g 全局匹配 正则的规则:/正则表达式/修饰符
将特殊字符转义成实体字符
//定义转义html的方法 传入htm字符串 将对应的html标签转换成为对应的输出 g 全局匹配 正则
function htmlEscape(htmlStr){//<h1>你好</h1> 显示直接 而不是html代码
// /正则表达式/修饰符
return '转义之后的字符:'+htmlStr.replace(/<|>|"|&/g,(match)=>{ //识别出<> "" 和&
//回调的结果
switch(match){ //将特殊字符转义成实体字符
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
//向外暴露需要的成员
module.exports={
dateFormat ,//将方法导出
htmlEscape
}
还原html字符串的函数
function htmlUnEscape(str){//进行正则的匹配
return str.replace(/<|>|"|&/g,(match)=>{
//回调的结果
switch(match){ //将特殊字符转义成实体字符
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
整体的功能全部在index.js中 显示的很臃肿 ,所以在给npm上传的时候需要进行模块拆分