Node.js入门笔记12
- Node.js---npm包
- 一、什么是npm包?
- [二、npm 基础使用](#二、npm 基础使用)
- 三、包管理配置文件(package.json)
- 五、包的分类
Node.js---npm包
一、什么是npm包?
-
定义
npm(全称 Node Package Manager)是 Node.js 附带的包管理工具,用于安装、管理、共享和发布 JavaScript 模块。npm 不仅能管理项目本地依赖,还能全局安装一些命令行工具。
-
背景与历史
npm 由 Isaac Z. Schlueter 开发,最初为了解决 Node.js 模块管理的痛点。它使开发者能够快速获取社区中数以百万计的开源包,并统一管理依赖关系。
-
包的来源
不同于 Node.js 中的内置模块与自定义模块,包是由第三方个人或团队开发出来的,免费供所有人使用。注意:Node.js 中的包都是免费且开源的,不需要付费即可免费下载使用,
包的来源有两个地方:
1.官方包管理平台 npm
2.国内镜像 cnpm
-
为什么需要包
由于 Node.js 的内置模块仅提供了一些底层的 API,导致在基于内置模块进行项目开发的时,效率很低包是基于内置模块封装出来的,提供了更高级、更方便的 API,极大的提高了开发效率。包和内置模块之间的关系,类似于jQuery 和 浏览器内置 API 之间的关系。
-
从哪里下载包
国外有一家 IT 公司,叫做 npm,Inc.这家公司旗下有一个非常著名的网站: https://www.npmjs.com/,它是全球最大的包共享平台,你可以从这个网站上搜索到任何你需要的包,只要你有足够的耐心!到目前位置,全球约 1100 多万的开发人员,通过这个包共享平台,开发并共享了超过 120 多万个包, 供我们使用。npm,nc.公司提供了一个地址为 https://registny.npmjs.org/的服务器,来对外共享所有的包,我们可以从这个服务器上下载自己所需要的包。
注意:
从 https://www.npmjs.com/网站上搜索自己所需要的包
从 https://reqistry.npmis.org/ 服务器上下载自己需要的包
二、npm 基础使用
- 核心命令:
javascript
npm install 包名 # 安装包(默认最新版本)
npm install 包名@版本号 # 安装指定版本
npm install 包名 --save # 安装并写入 dependencies(生产依赖)
npm install 包名 --save-dev # 安装并写入 devDependencies(开发依赖)
npm install # 安装所有依赖
npm uninstall 包名 # 卸载包
- 关键文件 :
node_modules:存放所有安装的包。
package-lock.json:锁定包版本,确保依赖一致性。
- 语义化版本规范 :
版本号格式:主版本.次版本.修订号(如 2.24.0),遵循"向前兼容"规则:
主版本:重大更新(可能不兼容旧版)
次版本:功能新增(兼容旧版)
修订号:Bug 修复(兼容旧版)
三、包管理配置文件(package.json)
-
作用:记录项目信息、依赖包及版本,确保多人协作一致性。
-
创建:
javascript
npm init -y # 快速生成(需在英文目录下)
-
依赖分类:
dependencies:生产环境必须的包(如 express)。
devDependencies:开发环境需要的包(如 eslint)。
-
安装所有依赖:
javascript
npm install # 根据 package.json 安装所有依赖
-
初次装包后多了哪些文件
node_modules 文件夹 //存放所有的包.文件夹用来存放所有已安装到项目中的包。require( 导入第三方包时,就是从这个目录中查找并加载包。
package-lock.json 文件 //锁定安装包的版本号.来记录 node modules 目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等
-
安装指定版本的包
默认情况下,使用 npm instal 命令安装包的时候,会自动安装最新版本的包。如果需要安装指定版本的包,可以在包名之后,通过 @ 符号指定具体的版本,例如:
npm install 包名@版本号 //安装指定版本的包
npm install 包名@latest //安装最新版本的包
-
如何记录项目中安装了哪些包
在项目根目录中,创建一个叫做 package.jsqn 的配置文件,即可用来记录项目中安装了哪些包。从而方便剔除node modules 目录之后,在团队成员之间共亨项目的源代码。
注意:今后在项目开发中,一定要把 node modules 文件夹,添加到.gitignore 忽略文件中。
-
快速创建 package.json
npm 包管理工具提供了一个快捷命令,可以在执行命令时所处的目录中,快速创建 package.json 这个包管理配置文件:
npm init -y
注意:
上述命令只能在英文的目录下成功运行!所以,项目文件夹的名称一定要使用英文命名,不要使用中文,不能出现空格.。
运行 npm install 命令安装包的时候,npm 包管理工具会自动把包的名称和版本号,记录到 package.json 中。
-
dependencies 节点
dependencies 节点用来记录项目中都用到了哪些包,以及这些包的版本号。当执行 npm install 命令时,会自动安装 dependencies 节点中所记录的包。
如果某些包只在项目开发阶段会用到,在项目上线之后不会用到,则建议把这些包记录到devDependencies 节点中与之对应的,如果某些包在开发和项目上线之后都需要用到,则建议把这些包记录到 dependencies 节点中
您可以使用如下的命令,将包记录到 devDependencies 节点中:
//安装指定的包,并记录到 devDependencies 节点中
npm i 包名 -D // 注意:上述命令是简写形式,等价于下面完整的写法
npm install包名--save-dev
-
一次性安装所有的包
在项目根目录中,只需要执行 npm install 命令,就可以自动安装 package.json 文件中 dependencies 节点中所记录的所有包。这样,就不用一个一个手动安装了。
四、提升下载速度
-
为什么下包速度慢
在使用 npm 下包的时候,默认从国外的 https://registry.npmis.org/服务器进行下载,此时,网络数据的传输需要经过漫长的海底光缆,因此下包速度会很慢。
-
淘宝 NPM 镜像服务器
淘宝在国内搭建了一个服务器,专门把国外官方服务器上的包同步到国内的服务器,然后在国内提供下包的服务。从而极大的提高了下包的速度。镜像(Mirroring)是一种文件存储形式,一个磁盘上的数据在另一个磁盘上存在一个完全相同的副本即为镜像。
-
切换 npm 的下包镜像源
下包的镜像源,指的就是下包的服务器地址。
javascript
// 查看当前的下包镜像源
npm config get registry
// 将下包的镜像源切换为淘宝镜像源
npm config set registry https://registry.npm.taobao.org/
// 检查镜像源是否下载成功
npm config get registry
注意:
上述命令只是临时切换,只对当前的项目有效,如果想永久切换,可以使用下面的命令:
javascript
npm config set registry https://registry.npm.taobao.org --global
- nrm
为了更方便的切换下包的镜像源,我们可以安装 nrm 这个小工具,利用 nrm 提供的终端命令,可以快速查看和切换下包的镜像源。
javascript
// 通过 npm 包管理器,将 nrm 安装为全局可用的工具
npm i nrm -g
// 查看所有可用的镜像源
nrm ls
// 将下包的镜像源切换为 taobao 镜像
nrm use taobao
// 检查镜像源是否切换成功
nrm current
五、包的分类
-
包的分类
包的分类有很多种,常见的包的分类有以下几种:
那些被安装到项目的 node modules 日录中的包,都是项目包.
项目包又分为两类,分别是:
开发依赖包(被记录到 devDependencies 节点中的包,只在开发期间会用到)
核心依赖包(被记录到 dependencies 节点中的包,在开发期间和项目上线之后都会用到)
-
全局包
全局包是指那些被安装到全局 node_modules 目录中的包。全局包是一个独立的包,可以在任何一个项目中使用,不受项目包的影响。
在执行 npm install 命令时,如果提供了 -g 参数,则会把包安装为全局包.
全局包会被安装到 C:\Users\用户日录\AppData\Roaming\npm\node_modues 目录下,
npmi包名-g 全局安装指定的包
javascript
npm uninstall 包名-g //卸载全局安装的包
注意:
只有工具性质的包,才有全局安装的必要性。因为它们提供了好用的终端命令
判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明即可
- 规范的包结构
一个规范的包,它的组成结构,必须符合以下3点要求:
① 包必须以单独的目录而存在
②)包的顶级目录下要必须包含 package.json 这个包管理配置文件
③ package.json 中必须包含 name,version,main 这三个属性,分别代表包的名字、版本号、包的入口