Node.js(2)-发布自己的npm包过程

121 阅读3分钟

需要实现的功能

引用‘justce’这个第三方包,可以

  1. 格式化时间
  2. 转义HTML中的特殊字符
  3. 还原HTML中的特殊字符
const ceshi= require('./justce')

// 格式化时间的功能
const dtStr = ceshi.dateFormat(new Date())
console.log(dtStr) 
//# 在`index.js`中定义HTML的方法

const htmlStr = '<h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>'
const str = ceshi.htmlEscape(htmlStr)
console.log(str)
//&lt;h1 title=&quot;abc&quot;&gt;这是h1标签&lt;span&gt;123&amp;nbsp;&lt;/span&gt;&lt;/h1&gt;

const str2 = ceshi.htmlUnEscape(str)
console.log(str2)
// <h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>

初始化包的基本结构

  1. 创建 justce 文件夹,作为包的根目录
  2. 在 justce 文件夹中,新建三个文件: package.json(包管理配置文件) index.js(包的入口文件) README.md(包的说明文档)

初始化package.json

{
  "name": "justce",
  "version": "1.1.2",
  "main": "index.js",
  "description": "提供了格式化时间、HTMLEscape相关的功能",
  "keywords": [
    "dateFormat",
    "escape"
  ],
  "license": "ISC"
}

关于更多license许可协议相关内容,可参考七种开源许可证 - 简书 (jianshu.com)

index.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
}

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

// 定义转义 HTML 字符的函数
function htmlEscape(htmlstr) {
  return htmlstr.replace(/<|>|"|&/g, match => {
    switch (match) {
      case '<':
        return '&lt;'
      case '>':
        return '&gt;'
      case '"':
        return '&quot;'
      case '&':
        return '&amp;'
    }
  })
}
module.exports = {
  htmlEscape
}

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

// 定义还原 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 = {
  htmlUnEscape
}

将不同的功能进行模块化划分

  1. 将格式化时间的功能,拆分到 src -> dateFormat.js 中
  2. 将处理 HTML 字符串的功能,拆分到 src -> htmlEscape.js 中
  3. 在 index.js 中,导入两个模块,得到需要向外共享的方法
  4. 在 index.js 中,使用 module.exports 把对应的方法共享出去
// 这是包的入口文件
const date = require('./src/dateFormat')
const escape = require('./src/htmlEscape')

// 向外暴露需要的成员
module.exports = {
  ...date,
  ...escape
}

编辑包的说明文档

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

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

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

安装方式、导入方式、格式化时间、转义 HTML 中的特殊字符、还原 HTML 中的特殊字符、开源协议

image.png

发布到npm上

登录npm账户

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

把包发布到 npm 上

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

image.png

删除已发布的包

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

image.png

注意: npm unpublish 命令只能删除 72 小时以内发布的包 npm unpublish 删除的包,在 24 小时内不允许重复发布 发布包的时候要慎重,尽量不要往 npm 上发布没有意义的包!