node.js 包的分类和如何发一个自己的包

1.项目包

  1. 那些被安装到项目的 node_modules 目录中的包,都是项目包

  2. 项目包又分为两类,分别是:

  • 开发依赖包,被记录到 devDependencies 节点中的包,只在开发期间会用到
  • 核心依赖包,被记录到 dependencies 节点中的包,在开发期间和项目上线之后都会用到

 2.全局包

  1. 在执行 npm install 命令时,如果提供了 -g 参数,则会把包安装为全局包

  2. 全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录下

  3. 注意:

  • 只有工具性质的包,才有全局安装的必要性。因为它们提供了好用的终端命令
  • 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可

如何判断全局包和项目包

看这个包是如何使用的

1.通过命令行来用的---全局安装的

2.通过require引入之后使用----项目包

可使用npm root -g 查看所有目录下的全局包

 3.开发一个属于自己的包

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

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

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

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

 1.初始化包的基础结构

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

  2. 在 ayao-tools 文件夹中,新建三个文件 

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

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

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

2.初始化 package.json 配置文件

打开终端,输入 npm init -y 命令 ,自动创建一个package.json文件 

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

3.在 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

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

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

5.在 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 '&'
    }
  })
}

6.划分不同的模块

  1. 在 ayao-tools文件夹下创建一个src文件夹

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

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

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

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

7.编写包的说明文档

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

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

例:

### 安装
​```
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

8.注册 npm 账号

以上文件都准备好了之后就可以注册npm账号把包上传上去了

  1. 访问 npmhttps://www.npmjs.com/ 网站,点击 sign up 按钮,进入注册用户界面

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

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

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

 注册好账号之后,在终端中输入npm login 命令,依次输入用户名,密码,邮箱

9.将包发布到npm上

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

 10.删除已发布的包

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

2.注意事项

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

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

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

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值