Node.js初探(三)

2021-06-15  本文已影响0人  喑宝儿
1、包

第三方模块,第三方免费提供下载,包是基于内置模块封装出来的

2、包的操作

https://www.npmjs.com/ :全球最大的包共享平台

https://registry.npmjs.org/ :包共享服务器,提供下载

3、包管理配置文件,项目根目录,package.json

(1)记录项目中安装的包:package.json

(2)快速在所处的目录中创建package.json——npm init -y

(3)package.json中的dependencies节点:专门用来记录安装的包

(4)一次性安装所有的包:在剔除node_modules的项目中执行npm install,简写npm i

(执行过程中,会读取dependencies节点,读取到包名和版本号,就会将涉及到的包进行安装)

(5)卸载包:npm uninstall 包名(卸载后包从node_modules文件夹中自动删除,package.json文件也会自动修改)

4、devDependencies节点

如果某些包只在开发时使用,安装到devDependencies节点中:

npm i 包名 -D 完整写法 :npm install 包名 --save--dev

5、切换npm的下包镜像源
// 查看当前的下包镜像源
npm config get registry
// 将下包的镜像源切换为淘宝镜像源
npm config set registry=https://registry.npm.taobao.org/
// 查看修改之后的镜像源
npm config get registry
6、nrm快速查看和切换镜像源
// 将nrm安装为全局可用
npm i nrm -g
// 查看所有的镜像源
nrm ls
// 将下包的奖项源切换为taobao镜像
nrm use taobao
7、包的分类

核心依赖包(npm i 包名)

开发依赖包(npm i 包名 -D)

全局包(npm i 包名 -g):工具性质包才有全局安装的必要性

8、规范的包结构

必须以单独的目录存在

顶级目录下必须包括package.json文件

package.json中必须包括name(名称), version(版本号),main(入口文件)三个属性

9、开发属于自己的包

功能:

格式化日期

转义HTML中的特殊字符

还原HTML中的特殊字符

(1)初始化包结构

> * 新建包的根目录test,以及在其中新建`package.json(配置文件)`,`index.js(入口文件)`,`README.md(说明文档)`
> 
> *   package.json
>     
>     
>    ```js
>    {
>      "name": "tools-yin",  // 包名
>      "version": "1.0.0",  // 版本号
>      "main": "index.js",  // 入口文件
>      "description": "提供格式化事件,转义左右尖括号",  // 描述信息
>      "keywords": [],  // 搜索关键字
>      "license": "ISC"  // 开源许可协议
>     }
>     ```
> *   main属性的作用:导入模块时,会自动查找入口文件进行使用

(2)包结构中的src文件夹

// 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
function htmlEscape(htmlStr) {
 return htmlStr.replace(/<|>|"|&/g, match => {
 switch (match) {
 case '<':
 return '&lt;'
 case '>':
 return '&gt;'
 case '"':
 return '&quot;'
 case '&':
 return '&amp;'
 }
 })
}

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
}

(3)包的入口文件

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

module.exports = {
 ...date,
 ...escape
}

(4)在其它地方使用

// test.js(和tools-yin文件夹同级)
const tool = require('./tools-yin')

const dt = tool.dateFormat(new Date())
console.log(dt);

const h = '<h1 title="abc">h1标签<span>123&nbsp;</span></h1>'
const str = tool.htmlEscape(h)
console.log(str);

const htmlStr = tool.htmlUnEscape(str)
console.log(htmlStr)

(5)编写包的说明文档(README.md)

(6)发布包

10、模块的加载机制

(1)优先从缓存中加载:

(2)内置模块的加载优先级是最高的:即使其它模块和内置模块重名,优先加载内置模块

(3)加载自定义模块时:

(4)第三方模块加载

(5)目录作为模块加载

上一篇 下一篇

猜你喜欢

热点阅读