Node.js 模块化(二) 开发包/模块加载机制

1. 开发属于自己的包

1. 需要实现的功能

2. 初始化包的基本结构

 

3. 初始化 package.json

属性:

name:包的名称(不能重复,在官网检索一下,避免重复)

version:版本号

main:入口文件(外界在使用require导入这个包时,导入的就是main指向的文件)

description:简短的描述信息

 keywords:搜索的关键字(数组里面每一个属性都是一个字符串)

license:这个包遵循的开源许可协议

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

  

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

g代表全局匹配(从前到后把所有符合条件的项都匹配,|代表或者);

/<|>|"|&/g是正则表达式

 

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

7. 将不同的功能进行模块化拆分

 

// 定义格式化时间的函数 dateFormat.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
}
// 将处理 HTML 字符串的功能,拆分到 src -> htmlEscape.js 中
//定义转义 HTML 字符的函数
function htmlEscape(htmlstr) {
  return htmlstr.replace(/<|>|"|&/g, match => {
    switch (match) {
      case '<':
        return '&lt;'
      case '>':
        return '&gt;'
      case '"':
        return '&quot;'
      case '&':
        return '&amp;'
    }
  })
}

// 定义还原 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 = {
  htmlEscape,
  htmlUnEscape
}
// 这是包的入口文件index.js

const date = require('./src/dateFormat')
const escape = require('./src/htmlEscape')

// 向外暴露需要的成员
module.exports = {
  //...是展开运算符,
  //把这个对象中每个属性展开了交给module.exports这个对象进行存储
  ...date,
  ...escape
}
//测试文件
const itheima = require('./itheima-tools')

// 格式化时间的功能
const dtStr = itheima.dateFormat(new Date())
console.log(dtStr)
console.log('-----------')

const htmlStr = '<h1 title="abc">这是h1标签<span>123&nbsp;</span></h1>'
const str = itheima.htmlEscape(htmlStr)
console.log(str)
console.log('-----------')

const str2 = itheima.htmlUnEscape(str)
console.log(str2)

8. 编写包的说明文档

## 安装
```
npm install itheima-tools
```

## 导入
```js
const itheima = require('itheima-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

2 发布包

1. 注册 npm 账号

2. 登录 npm 账号

3. 把包发布到 npm 上

第一步:cd:到项目的根目录,再npm publish

4. 删除已发布的包

3. 模块的加载机制

3.1 优先从缓存中加载

3.2 内置模块的加载机制

3.3 自定义模块的加载机制

3.4 第三方模块的加载机制

3.5 目录作为模块

在json里面不能使用单引号,必须使用双引号

通过require加载一个文件夹的时候:如下

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值