我么都知道用第三方开发的包,但是想要充分了解包的结构还是需要我们自己试试写一个包;
那么,我们如何自定义一个包呢?
1、了解包结构:
我们的报里面有这几个东西,其中重要的是后面三个:
index.js:函数入口
package.json:包管理配置文件
READNE.md:说明文档
这里的src其实是我将功能函数分离了出来,我们可以利用,我们可以在index.js中写入一下代码:
//主要功能函数入口
const format = require('./src/myFormat.js')
const escope = require('./src/myEscope.js')
//3.1 向外输入格式转换函数
module.exports = {
...format,
...escope
}
这里的module.exports的用法比较简单,就是我们用require(”包名“)导入一个模块的时候,会加载该包中的module.exports对象,我们需要在这个对象里面将我们的属性或者函数放进去,对外暴露,不然的话别人用不了;
那么,这里的思路就是我在src中的两个模块中的函数使用module.exports向外暴露,又在index.js中进行导入和暴露,那么我们就可以通过index.js剥离到我们想要的函数,而在index.js之中,我们使用了[...模块对象]来将里面的内容展开,那么别人就可以通过index.js来加载所有函数;
2、创建出包结构之后,我们就往里编写我们的功能函数,我这里拿时间格式化函数和html转义函数为例:
时间管理函数(放在src中的myformat.js中):
关于时间管理函数的原理,我在之前的博客里面有:(111条消息) node.js:我问什么要用npm?_编程学渣ズ的博客-CSDN博客客CSDNCSDNCSDNCSDN客
//1.1 创建一个格式化时间的函数
function formatTime(t){
t = new Date()
//1.2 获取时间的年
const y = padzero(t.getFullYear())
//1.3 获取时间的月
const m = padzero(t.getMonth()+1)
//1.4 获取时间的天
const d = padzero(t.getDate())
//1.5 获取时间的时
const h = padzero(t.getHours())
//1.6 获取时间的分
const f = padzero(t.getMinutes())
//1.7 获取时间的秒
const s = padzero(t.getSeconds())
return y+'-'+m+'-'+d+' '+h+':'+f+':'+s
}
//2.1 创建一个补零函数
function padzero(n){
return n > 9? n:'0'+n
}
module.exports={
formatTime
}
格式化html函数(放在myEscope.js中):
//4.1 格式化HTML函数
function htmlEscope(nstr){
return nstr.replace(/<|>|"|&/g,(match)=>{
//4.2 创建开关语句进行各种情况的判断
switch(match){
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
//5.1 格式化HTML函数
function htmlUnEscope(nstr){
return nstr.replace(/<|>|"|&/g,(match)=>{
//4.2 创建开关语句进行各种情况的判断
switch(match){
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
module.exports={
htmlEscope,
htmlUnEscope
}
为什么要字符转义?
因为在一些输入文本提交的过程中,有一些老六会将html标签填写进去,如果我们不去处理就会影响网页,这是相当危险的,所以我们要写一个这样的函数,我们的思路就是:
利用字符串的replace方法,结合使用正则表达式和switch函数进行替换就可以,只需要注意一个:
['<'=<'>'=>' " '="'&' = &];
3、我们函数写好之后,来看看package.json之中怎么写:
{
"name": "mynode-utils",
"version": "1.0.0",
"main": "index.js",
"description": "格式化时间,htmlEscope功能",
"keywords": ["dataFormat","escope"],
"license": "ISC"
}
这里有六个值:
name:包名; version:版本号,我们默认为1.0.0; main:入口函数;description:对改包的一个简单描述; keywords:可以搜到的关键字; license:开源协议,使用官方建议:ISC
4、最后一个说明文档,也就是在我们发布包了之后显示的说明文档:
## 安装
```
npm install sunnodeutils
```
## 导入
```js
将包按下列格式导入
const myUtil = require('./myNode-util')
```
## 用法:格式化时间和html字符串的转移、还原
```js
创建一个时间字符串并用格式转换函数
const dt = new Date()
const nstr = myUtil.formatTime(dt)
创建一个HTML字符串并且用转义函数
const nstr1 = '<div style="abc">aaa <div>'
const result1 = myUtil.htmlEscope(nstr1)
使用还原函数
const ystr = myUtil.htmlUnEscope(result1)
```
## 开源协议
```
ISC
```
5、将一切都准备就绪后,我们需要一个npm账号来供我们进行发布包,大家可以去:
进行创建账号: 点击右上角的sign in 按照提示进行创建;
创建完成之后我们在该包命令行下登陆自己的账号并且输入一下命令进行发布:
npm publish
注意:我们登陆的流程是:
输入下面命令登入:
npm login
然后会要求输入用户名和密码、邮箱,还有一个是邮箱验证的验证码,要登录自己的邮箱才能看到,我这里登陆过了所以就不做演示;
6、发布之后我们就可以在自己头像的packages之中看到了
7、删除包,很简单,只需要按照下面的格式进行删除:
npm unpublish 包名 --force
但是要注意的是这个只能删除72小时内发布的包,而且删除之后,24小时内不允许发布同名的包;
建议大家不要随便在网上发一些没有用的包;
关注我,更多分享!