手把手教你发个包

本文详细介绍了Node.js中包的概念,包括包的来源、作用、获取途径以及如何使用npm下载。通过实例展示了如何创建一个包含格式化时间、HTML转义和还原功能的包,包括包的结构、模块划分、编写说明文档以及如何发布到npm。同时,讲解了如何注册npm账号、登录并发布及删除包的步骤。
摘要由CSDN通过智能技术生成

 包

什么是包

  1. Node.js 中的第三方模块又叫做包

 包的来源

  1. 不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用

  2. 注意: Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用

 为什么需要包

  1. 由于 Node.js 的内置模块仅提供了一些底层的 API,导致在基于内置模块进行项目开发的时,效率很低

  2. 包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率

  3. 包和内置模块之间的关系,类似于 jQuery 和 浏览器内置 API 之间的关系

从哪里下载包

在学习和以后的实际开发中,下载包,都是从 npm 这个网站下载

如何下载包

  1. 下载包使用 npm ,全名叫做 Node Package Manager(简称 npm 包管理工具),这个包管理工具随着 Node.js 的安装包一起被安装到了用户的电脑上。

 包的语义化版本

npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些配置信息。例如:

  1. 项目的名称、版本号、描述等

  2. 项目中都用到了哪些包

  3. 哪些包只在开发期间会用到

  4. 那些包在开发和部署时都需要用到

开发属于自己的包

规范的包结构

  1. 一个规范的包,它的组成结构,必须符合以下 3 点要求:

    • 包必须以单独的目录而存在

    • 包的顶级目录下要必须包含 package.json 这个包管理配置文件

    • package.json 中必须包含 nameversionmain 这三个属性,分别代表包的名字、版本号、包的入口

  2. 注意:以上 3 点要求是一个规范的包结构必须遵守的格式,关于更多的约束,可以参考这个网址

了解需要实现的功能

  1. 需要实现的功能

    • 格式化日期

    • 转义 HTML 中的特殊字符

  2. 还原 HTML 中的特殊字符

初始化包的基础结构

  1. 新建 itheima-tools 文件夹,作为包的根目录

  2. itheima-tools 文件夹中,新建如下三个文件:

    • package.json (包管理配置文件)

    • index.js (包的入口文件)

    • README.md (包的说明文档)

初始化 package.json 配置文件

{
  "name": "flightloong-tools",
  "version": "1.0.0",
  "description": "提供格式化时间、HTMLEscape相关功能",
  "main": "index.js",
  "keywords": [
    "itcast",
    "itheima",
    "dateFormat",
    "escape"
  ],
  "license": "ISC"
}

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

// 包的入口文件 index.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
}
​
// 测试代码
​
const itheima = require('./flightloong-tools/index')
​
// 格式化时间的代码
const dtStr = itheima.dateFormat(new Date())
console.log(dtStr) // 2020-06-23 01:16:57

package.json 文件中 main 的作用

在导入一个文件的时候,如果没有指定一个特定的文件,但是却能够得到某个包的返回内容,这是因为 Node 在使用 require 导入某个路径的时候,发现没有具体的文件,就会看这个路径下查看是否有 package.json 这个文件,如果有,则查看是否有 main 这个属性,如果有,则指定 main 属性对应的文件作为要执行的文件

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

// index.js
// 定义转义 HTML 字符的函数
function htmlEscape(htmlstr) {
  return htmlstr.replace(/<|>|"|&/g, match => {
    switch (match) {
      case '<':
        return '&glt;'
      case '>':
        return '&gt;'
      case '"':
        return '&quot;'
      case '&':
        return '&amp;'
    }
  })
}
// test.js
​
const itheima = require('./flightloong-tools/index')
​
// 转义 Html 字符串
const htmlStr = '<h4 title="abc">这是h4标签<span>123&nbsp;</span></h4>'
const str = itheima.htmlEscape(htmlStr)
console.log(str)

 

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

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

划分不同的模块

  1. 将格式化时间的功能,拆分到 src -> dateFormat.js

  2. 将处理 HTML 字符串的功能,拆分到 src -> htmlEscape.js

  3. index.js 中,导入两个模块,得到需要向外共享的方法

  4. index.js 中,使用 module.exports 把对应的方法共享出去

     

// 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
}
​
// htmlEscape.js
​
// 定义转义 HTML 字符的函数
function htmlEscape(htmlstr) {
  return htmlstr.replace(/<|>|"|&/g, match => {
    switch (match) {
      case '<':
        return '&glt;'
      case '>':
        return '&gt;'
      case '"':
        return '&quot;'
      case '&':
        return '&amp;'
    }
  })
}
​
// 定义还原 HTML 字符的函数
function htmlUnEscape(str) {
  return str.replace(/&glt;|&gt;|&quot;|&amp;/g, (match) => {
    switch (match) {
      case '&glt;':
        return '<'
      case '&gt;':
        return '>'
      case '&quot;':
        return '"'
      case '&amp;':
        return '&'
    }
  })
}
​
module.exports = {
  htmlEscape,
  htmlUnEscape
}
​
// test.js
​
const itheima = require('./flightloong-tools/index')
​
// 格式化时间的代码
const dtStr = itheima.dateFormat(new Date())
console.log(dtStr)
​
// 转义 Html 字符串
const htmlStr = '<h4 title="abc">这是h4标签<span>123&nbsp;</span></h4>'
const str = itheima.htmlEscape(htmlStr)
console.log(str)
​
// 还原 Html 字符串
const resetHtml = itheima.htmlUnEscape(str)
console.log(resetHtml)
​

编写包的说明文档

  1. 包根目录中的 README.md 文件,是包的使用说明文档。通过它,我们可以事先把包的使用说明,以 markdown 的格式写出来,方便用户参考

  2. README 文件中具体写什么内容,没有强制性的要求;只要能够清晰地把包的作用、用法、注意事项等描述清楚即可

  3. 我们所创建的这个包的 README.md文档中,会包含以下 6 项内容

    • 安装方式

    • 导入方式

    • 格式化时间

    • 转义 HTML 中的特殊字符

    • 还原 HTML 中的特殊字符

    • 开源协议

### 安装
```
npm i flightloong-tools
```
​
### 导入
```js
const itheima = require('./flightloong-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

 注册 npm 账号

  1. 访问 npm 网站,点击 sign up 按钮,进入注册用户界面

  2. 填写账号相关的信息:Full NamePublic EmailUsernamePassword

  3. 点击 Create an Account 按钮,注册账号

  4. 登录邮箱,点击验证链接,进行账号的验证

 登录 npm 账号

  1. npm 账号注册完成后,可以在终端中执行 npm login 命令,依次输入用户名、密码、邮箱后,即可登录成功

  2. 注意:在运行 npm login 命令之前,必须先把下包的服务器地址切换为 npm 的官方服务器。否则会导致发布包失败!

把包发布到 npm

将终端切换到包的根目录之后,运行 npm publish 命令,即可将包发布到 npm 上(注意:包名不能雷同)

删除已发布的包

  1. 运行 npm unpublish 包名 --force 命令,即可从 npm 删除已发布的包

  2. 注意事项

    • npm unpublish 命令只能删除 72 小时以内发布的包

    • npm unpublish 删除的包,在 24 小时内不允许重复发布

    • 发布包的时候要慎重,尽量不要往 npm 上发布没有意义的包!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端程序员辉哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值