一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第3天,点击查看活动详情。
什么是包
Node.js 中的第三方模块又叫做包
包的来源
- 不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用
- Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用
为什么需要包
- 由于 Node.js 的内置模块仅提供了一些底层的 API,导致在基于内置模块进行项目开发时,效率很低
- 包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率
从哪里下载包
全球最大的包共享平台 npm,www.npmjs.com ,可以从这个网站上搜索到任何你需要的包
如何下载包
-
通过使用包管理工具 Node Package Manager (简称 npm 包管理工具)下载包,这个包管理工具是随着 Node.js 的安装包一起被安装到电脑上
-
在终端可以通过命令
npm -v查看包管理工具的版本
在项目中安装包
-
终端命令 (默认下载最新版本)
npm install 包的完整名字 eg: npm install moment-
命令简写
npm i 包的完整名字 eg: npm i moment -
安装指定版本的包
npm install 包的完整名字@版本号 eg: npm i moment@2.22.2
-
-
初次安装包,项目文件夹下的变化
初次安装包,在项目文件夹中多了一个叫
node_modules的文件夹和package-lock.json的配置文件-
node_modules文件夹用来存放所有已安装到项目中的包,require导入第三方时,就是从这个目录中查找并加载包 -
package-lock.json配置文件用来记录node_modules目录下的每一个包的下载信息,如包的名字、版本号、下载地址等等 -
开发人员不要手动去修改
node_modules和package-lock.json文件中的任何代码,npm 包管理工作会自动维护它们
-
包的语义化版本规范
-
包的版本号是以 点分十进制 形式进行定义的,总共有三位数字,如 2.24.0
-
其中每一位数字所代表的含义如下
- 第一位数:大版本
- 第二位数:功能版本
- 第三位数:bug修复
-
版本号升级规则:只有前面版本号增长,则后面的版本号归零
包管理配置文件
npm 规定,在项目根目录中,必须提供一个叫做 package.json 的包管理配置文件,用来记录与项目有关的一些配置信息。例如
- 项目的名称、版本号、描述
- 项目中都会用到哪些包
- 哪些包只在开发中用,哪些包在发布时用
多人协作
-
多人通过 git 共享项目代码,为了避免项目体积太大,一般建议不上传第三方包,共享时会删除
node_modules,只共享package.json配置文件 -
记录项目安装了哪些包
在项目根目录中,创建一个叫做
package.json的配置文件,即可用来记录项目中安装了哪些包,从而方便剔除node_modules目录之后,在团队成员之间共享项目的源代码 -
在项目开发中,可将
node_modules添加到 .gitignore 忽略文件中
快速创建 package.json
-
npm 包管理工具提供了一个快捷命令,可以在执行命令时所在的目录中,快速创建
package.json这个包管理配置文件npm init -y -
上述命令只能在英文目录下安装成功,不要使用中文和空格
-
运行
npm install命令安装包的时候, npm 包管理工具会自动把包的名称和版本号记录到package.json中 -
dependencies节点在
package.json文件中,有一个dependencies节点,专门用来记录使用npm install命令安装过的包"dependencies": { "moment": "^2.29.1" } -
一次性安装所以的包
执行
npm install命令时,npm 包管理器会先读取package.json文件中dependencies节点,读取到记录的所有依赖包名称和版本号之后,npm 包管理工具会把这些包一次性下载到项目中 -
卸载包
-
执行
npm uninstall命令时,来卸载指定的包npm uninstall 包名 eg: npm uninstall moment -
npm uninstall命令执行成功后,会把卸载的包,自动从package.json的dependencies节点中移除
-
-
devDependencies节点-
如果某些包只在项目开发阶段会用到, 在项目上线之后不会用到,则建议把这些包记录到
devDependencies节点中。与之对应,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到dependencies节点中 -
示例
-
执行命令
//简写 npm install 包名 -D //完整写法 npm install 包名 -save-dev eg: npm install moment -D -
package.json文件"devDependencies": { "moment": "^2.29.1" }
-
-
解决下包速度慢的问题
-
为什么下包速度慢
在使用 npm 下包时,默认是从国外的服务器进行下载的的,所以比较慢
-
解决下包速度慢
-
镜像:镜像是一种存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像
-
淘宝在国内搭建了一个服务器(淘宝镜像),每隔一段时间,自动把 npm 官方服务器的包同步到国内,然后在国内提供下包服务,极大提高了下载速度
-
-
切换 npm 的下包镜像源
下包镜像源指的是下包的服务器地址
-
查看当前的下包镜像源
npm config get registry -
将下包的镜像源切换为淘宝镜像源
npm config set registry=http://registry.npm.taobao.org/ -
检查镜像源是否下载成功
npm config get registry
-
nrm
为了更方便的切换下包的镜像源,可以安装 nrm 小工具,利用 nrm 提供的终端命令,可以快速查看和切换下包的镜像源
-
通过 npm 包管理器,将 nrm 安装为全局可用的工具
npm i nrm -g -
查看所有可能的镜像源
nrm ls结果:
-
将下包的镜像源切换成 taobao 镜像
nrm use 要切换的镜像名称 eg: nrm use taobao
包的分类
-
使用 npm 包管理工具下载的包,共分为俩大类
- 项目包
- 全局包
-
项目包
被安装到项目的
node_modules目录中的包,都是项目包项目包分为俩类
- 开发依赖包(开发中使用,被记录在
devDependencies节点下 ) - 核心依赖包(开发和发布使用,被记录在
dependencies节点下 )
- 开发依赖包(开发中使用,被记录在
-
全局包
-
在执行
npm install命令时,如果提供了-g参数,则会把包安装为全局包 -
查看全局包
npm ls -g -
安装、卸载全局包
//安装 npm i 包名 -g //卸载 npm uninstall 包名 -g -
只有工具性质的包,才有全局安装的必要性
-
判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明
-
规范包的结构
一个规范的包,组成结构必须符合三个要求
-
包必须以单独的目录而存在
-
包的顶级目录下必须包含
package.json文件 -
package.json中必须包含name、version、main三个属性,分别代表包的名字、包的版本和包的入口