node js中的第三方模块叫做包,包一般是由第三方个人或者团队开发出来的,免费供个人使用。
node JS分为三个模块:
内置模块:自带的模块
自定义模块 :用户自己编写的模块
第三方模块:第三方的模块,需要使用先要下载导入
包的作用:
1node js的模块只提供底层API 导致在项目开发时,效率很低。
2 包是基于内置模块封装的,提供了更高级,更方便的APi,极大的提高了开发效率。
3 包和内置模块的关系,类似与JQuery和浏览器内置API之间的关系
安装包
npm install 包名 简写 npm i
node_modules 和 pageage-lock.json 的作用
初次装包完成后,在项目文件夹下多一个叫做 node_modules 的文件夹和 package-lock.json 的配置文件,他们的作用是:
- node_modules 文件夹用来存放所有已安装到项目中的包。require() 导入第三方包时,就是从这个目录中查找并加载包
- package-lock.json 配置文件用来记录 node_modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等
4 安装指定版本的包
默认情况下,使用 npm install 命令安装包的时候,会自动安装最新版本的包。如果需要安装指定版本的包,可以在包名之后,通过 @符号指定具体的版本,例如:npm i moment@2.22.2
包的语义化:包的版本是点分十进制 例如上面的2.22.2 第一个是大版本,一般是底层有太大的改动才升级,第二个功能版本,一般几个功能改动才升级,第三个bug版本,修复bug升级。
package.json
多人开发的时候,不用去上传 node_modules 因为这里面的东西太多了
npm init -y 快速生成 package.json 文件
dependencies 节点记录项目的依赖
导入一个项目之后,需要下载所有的依赖的话,直接输入命令 npm i 就好,自动去找 package.json 文件里面的依赖去进行下载
卸载包
npm uninstall 包名
如果我们全局安装,会在以下文件目录下:
C:\Users\用户名\AppData\Roaming\npm
devDependencies 于 dependencies 区别
devDependencies: 只在开发阶段需要用到的话放在这个里面
dependencies: 上线了之后也需要用到的放在这个里面
解决下包慢的问题
利用 nrm 工具
- 全局安装nrm
npm i nrm -g - 查看可用的源
nrm ls - 切换到淘宝镜像源
nrm use taobao
利用npm的命令 npm i 包名
如何解决网络慢的问题
切换成淘宝的镜像
利用的 nrm 工具
- 下载安装nrm
npm i nrm -g - 查询可用源的列表
nrm ls - 切换淘宝镜像源
nrm use taobao
一旦下载之后就会生成 node_modeules 文件夹
存放的就是下载的第三方的包
生成 package-lock.json
依赖对应的一些信息
配置文件 package.json
如何生成? npm init -y
dependencies: 项目开发和上线之后都需要依赖的包
npm i 包名
devDependencies: 项目开发阶段需要依赖的包,但是项目上线之后不需要了
npm i 包名 -D(--sava -dev)
包的分类
- 项目包
- 开发依赖包 npm i 包名 -D
- 核心依赖包 dependencies 这个节点下的
- 全局包
npm i 包名 -g
npm uninstall 包名 -g 删除全局包
工具性质的才会做成全局包
i5ting_toc
帮我们把 md 文件转成 html文件
npm i i5ting_toc -g
i5ting_toc -f md文件地址 -o
私下可以去玩一下
开发自己的第三方包
-
初始化结构
- 生成一个 package.json 文件
- 创建了入口文件 index.js
- 创建了一个 readme 的说明文档
-
初始化了项目配置文件里面的属性
- name 包名
- version 版本号
- main 入口文件
- description: 描述信息
- keywords 关键字 用于用户搜索
- license 遵循的协议 固定的协议 ISC
npm 登录
终端进行命令的登录
- 确保我们下包服务器是npm官网的 registry.npmjs.org,如果不是 进行切换
- npm login
- 输入相关 用户名 密码 邮箱
npm发包
- 排重,在npm官网上搜索以下名称
- npm publish 在当前包的根目录
删除npm发布的包
- npm unpublish 包名 --force
注意: 删除72小时之内的包 ,删除之后当前名称的包要过24小时才能重新发布
更新包
- 在package.json 里面修改 version 版本号
- 输入命令 npm publish 就可以了
模块加载机制
模块第一次加载完后会在内存中,后面再次去require的话先从缓存中找
模块在第一次加载的时候才会执行模块里面的代码
内置模块的加载优先级高于第三方的 如果名字相同,先加载内置模块的
自定义模块加载机制
- 先会切确比对
- 比对 .js 文件
- 比对 .json 文件
- 比对 .node
- 进行报错
一些常见的就是这些。