一、包的概念
1.什么是包?
指的就是node.js中的第三方模块又称为包。
就像电脑和计算机指的是相同的东西,第三方模块和包指的是同一个概念,值不够叫法不同。
2.包的来源、
不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。 注意: Node.js 中的包都是免费且开源的, 不需要付费即可免费下载使用。
3.为什么需要包?
由于 Node.js 的内置模块仅提供了一些底层的 API ,导致在基于内置模块进行项目开发的时,效率很低。
包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率。
包和内置模块之间的关系,类似于 jQuery 和 浏览器内置 API 之间的关系。
二、npm
2.1格式化时间的传统做法
步骤
- 创建格式化时间的自定义模块
- 定义格式化时间的方法
- 创建补零函数
- 从自定义模块中导出格式化时间的函数
- 导入格式化时间的自定义模块
- 调用格式化时间的函数
2.2使用了 包之后的做法?
1、使用 npm 包管理工具,在项目中安装格式化时间的包 moment
2、使用 require() 导入格式化时间的包
3、参考 moment 的官方 API 文档对时间进行格式化
// 1. 导入需要的包
// 注意:导入的名称,就是装包时候的名称
const moment = require('moment');
// 2.参考moment官方API文档,调取对应的方法,对时间进行格式化
// 3.调用moment()方法获取当前时间
// 4.针对当前时间,调用format()方法,按照指定的格式进行时间的格式化
const dt = moment().format('YYYY-MM-DD HH:mm:ss');
console.log(dt);
2.3 如何安装包呢?
npm install 包的完整名称 也可以简化成 npm i 包的完整名称
2.4 初次安装包之后多了哪一些文件?
2.5如何安装指定版本的包?
默认情况下,使用 npm install 命令安装包的时候,会自动安装最新版本的包。如果需要安装指定版本的包,可以在包名之后,通过 @ 符号指定具体的版本,例如:
npm i moment@2.22.2
4.6 包的语义化 了解
包的版本号是以“点分十进制”形式进行定义的, 总共有三位数字, 例如 2.24.0
其中每一位数字所代表的的含义如下:
第 1 位数字: 大版本
第 2 位数字: 功能版本
第 3 位数字: Bug 修复版本
版本号提升的规则: 只要前面的版本号增长了,则后面的版本号归零。
三、包的配置文件
npm 规定,在项目根目录中, 必须提供一个叫做 package.json 的包管理配置文件。用来记录与项目有关的一些
配置信息。例如:
- 项目的名称、版本号、描述等
- 项目中都用到了哪些包
- 哪些包只在开发期间会用到
- 那些包在开发和部署时都需要用到
3.1多人写作问题
所以 这种时候需要处理 node_modules文件,开发过程中用的包可以删除保留只需要部署用到的包,
3.2如何记录项目中安装了那些包
可以项目根目录创建一个叫做package.json的配置文件,可以用来记录安装了那些包,从而方便删除。
注意:今后在项目开发中,一定要把 node_modules (下载安装包的)文件夹,添加到 .gitignore 忽略文件中。
3.3快速创建package.json
可以用 npm init -y 来创建
注意:
① 上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格。
② 运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到 package.json 中。
3.4 dependencies节点
package.json 文件中,有一个 dependencies 节点,专门用来记录您使用 npm install 命令安装了哪些包。
3.5 一次性安装所有包
当我们拿到一个剔除了 node_modules 的项目之后,需要先把所有的包下载到项目中, 才能将项目运行起来。 否则会报类似于下面的错误:
//由于项目运行依赖于moment这个包,如果没有提前安装好这个包,就会包一下错误
Error:Cannot find module 'moment'
小技巧:可以运行 npm install 命令(或 npm i)一次性安装所有的依赖包。
//执行 npm install 命令时,npm 包管理工具会先读取package.json 中的dependencies节点,
//读取到记录的所有依赖包名称和版本号之后,npm包管理工具会把这些包一次性下载到项目中
npm install
3.6如何卸载包
可以运行 npm uninstall 命令,来卸载指定的包:
npm uninstall moment
注意: npm uninstall 命令执行成功后, 会把卸载的包,自动从 package.json 的 dependencies 中移除掉。
3.6 devDependencies 节点
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到 devDependencies 节点中。 与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到 dependencies 节点中。
您可以使用如下的命令, 将包记录到 devDependencies 节点中:
//安装指定的包。并记录到devDependencies节点中
npm i 包名 -D
//注意:上面的命令是简写形式,等价于下面的完整写法
npm i 包名 --save-dev
四、包下载慢的问题?
五、包的分类
在npm 包管理工具下载包的时候分为两大类。
分别是 项目包 和 全局包
5.1项目包
被安装包项目的node_modules 目录中的都是项目包
项目包又分为两类 :
开发依赖包 被记录到devDependencies接点中的包 开发中使用
核心依赖包 被记录到dependcies中的包,开发+项目上线的都会用的到
npm i 包名 -D #开发依赖包(会被记录到 devDependencies 节点下)
npm i 包名 #核心依赖包(会被记录到 dependencies 节点下)
5.2 全局包
在执行 npm i 命令时候,如果提供了-g 参数 则会把安装包 为全局包
全局包会被安装到 C:\Users\用户目录\AppData\Roaming\npm\node_modules 目录下。
npm i 包名 -g #全局安装指定的包
npm uninstall 包名 -g #卸载全局安装的包
注意:
① 只有工具性质的包, 才有全局安装的必要性。因为它们提供了好用的终端命令。
② 判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可
5.3 i5ting_toc
i5ting_toc 是一个可以把 md 文档转为 html 页面的小工具, 使用步骤如
#将 i5ting_toc 安装为全局包
npm install -g i5ting_toc
#调用 i5ting_toc,轻松实现 md 转 html 的功能
i5ting_toc -f 要转换的md文件路径 -o
5.4 规范的包结构
在清楚了包的概念、以及如何下载和使用包之后,接下来,我们深入了解一下包的内部结构。
一个规范的包,它的组成结构,必须符合以下 3 点要求:
① 包必须以单独的目录而存在
② 包的顶级目录下要必须包含 package.json 这个包管理配置文件
③ package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口。
注意:以上 3 点要求是一个规范的包结构必须遵守的格式,关于更多的约束,可以参考如下网址: