目录
1、包的定义和用途
包的定义: Node.js中的第三方模块称为包,这些包是由第三方个人或团队开发的,提供了更高级、更方便的API,极大地提高了开发效率。包和内置模块之间的关系类似于jQuery和浏览器内置API的关系。
包的用途: Node.js的内置模块仅提供了一些底层的API,因此在开发项目时,使用内置模块的效率较低。而包是通过内置模块封装出来的,提供了更高级的API,极大地提高了项目开发的效率。
2、包的查找和下载
包的查找地址: 可以在浏览器中访问 https://www.npmjs.com 来查找所需的包。
包的下载地址: 包的下载地址 https://registry.npmjs.org 不能直接访问,需要通过npm指令来下载。例如,在终端中输入npm install 包名来安装包。
3、包管理工具npm
npm(Node Package Manager)是Node.js的官方内置包管理工具,随着Node.js的安装包一起被安装到了用户电脑上,npm用于安装、卸载和管理Node.js的包。通过npm,可以方便地查找、下载和使用各种包,我们可以在终端执行npm -v
命令,来查看自己电脑上所安装的npm包管理工具的版本号。
4、npm初体验
1)进入项目目录(项目目录名不要使用中文、不能出现空格),通过npm init
命令初始化一个新的 npm 项目。
它会在当前目录下创建一个 package.json 文件,并根据提示,我们可以选择性的输入内容,如项目名称、版本号、作者等。
2)通过npm install <package-name>
或 npm i <package-name>
(简写) 命令安装所需的包。
默认情况下,使用 npm install <package-name>
命令安装包的时候,会自动安装最新版本的包。如果需要安装指定版本的包,可以在包名之后,通过 @ 符号指定具体的版本,命令格式为: npm install <package-name>@version
或者 npm i <package-name>@version
。
首先,包安装完成后,在项目文件夹下会多一个叫做 node_modules 的文件夹和package-lock.json 的配置文件。
-
node_modules 文件夹用来存放所有已安装到项目中的包。require()函数导入第三方包时,就是从这个目录中查找并加载包。
-
package-lock.json 配置文件用来记录 node_modules
目录下的每一个包的下载信息,例如包的名字、版本号、下载地址等。注意: 我们不要手动修改 node_modules 或 package-lock.json 文件中的任何代码,npm 包管理工具会自动维护它们。
其次,包安装完成后也会在package.json文件的dependencies节点,记录使用npm install
命令安装了那些包 。
3)编写js文件,引入的第三方包。
// app.js
const moment = require('moment')
//这里的YYYY-MM-DD是年月日的符号标识,在网站https://momentjs.com/docs中可以详细的了解
const currentDate = moment().format('YYYY-MM-DD')
console.log(currentDate) // 2O24-11-18
5、npm全局安装与本地安装包
在使用npm时,您可以选择全局安装或本地安装包。这两种方式有不同的用途和影响。以下是对它们的详细解释:
5.1、全局安装
全局安装是将包安装到全局位置,使其可以在系统的任何地方使用。这通常用于安装命令行工具或开发过程中需要在多个项目之间共享的工具(判断某个包是否需要全局安装后才能使用,可以参考官方提供的使用说明),
-
命令格式
在执行 npm install 命令时,如果提供了 -g 参数,则会把包安装为全局包。
npm install -g <package-name>[@version]
npm i -g <package-name>[@version]
-
安装位置
全局安装的包通常会被放置在以下位置(具体路径可能因操作系统和配置不同而异):- Unix/Linux/macOS: /usr/local/lib/
- Windows: C:\Users\用户名\AppData\Roaming\npm\
-
查看全局安装位置
npm config get prefix npm root -g
-
设置全局安装位置
npm config set prefix "路径地址"
5.2、本地安装
本地安装是将包安装到当前项目的 node_modules 目录中,使其仅在该项目中可用。这通常是项目依赖项的安装方式。
- 命令格式
npm install <package-name>[@version]
npm i <package-name>[@version]
- 安装位置
本地安装的包会被放置在项目根目录下的 node_modules 文件夹中。
(3)查看全局和本地已安装的包
- 查看全局安装的包
-g 参数是 global 全局的意思,–depth=0参数只会查到安装的包,并不会查到包的依赖,如果没有–depth=0参数,会把包的所有依赖也显示出来。
npm list -g [--depth=0]
npm ls -g [--depth=0]
- 查看本地安装的包
查看当前项目已安装包(项目根目录必须有 package.json 文件),在项目根目录下运行:
npm list [--depth=0]
npm ls[--depth=0]
注意事项:
- 全局安装的包过多:
- 可能会导致系统路径中的命令冲突。
- 占用较多磁盘空间。
- 本地安装的包:
- 应该始终记录在 package.json 文件中,以便于项目依赖管理。
- 使用 npm init 初始化项目,生成 package.json 文件。
6、npm镜像源配置
在使用 npm 下包的时候,默认从国外的 https://registry.npmjs.org/ 服务器进行下载,因此下包速度会很慢,所以,替换为国内服务器可以提高下载速度,国内有多个npm镜像源可供选择,如淘宝镜像、腾讯云镜像、cnpm等。这些镜像源通常会同步官方npm源的包,但更新可能有一定延迟。
- 全局配置: 使用
npm config set registry <镜像源地址>
命令可以设置全局npm镜像源。例如,设置为淘宝镜像源。npm config set registry https://registry.npmmirror.com/
- 项目单独配置: 要为特定的项目配置独立的npm镜像源,你需要在项目的根目录下创建或编辑一个.npmrc文件。这个文件支持多种配置选项,包括设置镜像源。此配置优先级最高,只会在当前项目中生效,不会影响全局的npm配置,且随项目一起移动,确保不同开发者环境下依赖下载的一致性。
registry=https://registry.npmmirror.com/
- 验证设置: 使用
npm config get registry
命令查看当前配置的镜像源地址,确认是否成功切换到指定的镜像源。
7、npm缓存
7.1、npm缓存的作用
总的来说,npm缓存是提高开发效率、优化安装过程的重要机制。
- 提高安装速度: npm缓存可以保存已下载的包,当需要再次安装时,直接从缓存中获取,避免了网络下载的时间消耗,显著加快安装速度。
- 支持离线安装: 在没有网络连接的情况下,只要所需包已缓存,就可进行离线安装,满足特定场景需求。
- **减少网络流量:**通过缓存机制,可以减少对网络的依赖,节省网络流量,特别是在多人协作或团队开发中,提高开发效率。
- 优化存储和查询: 合理的缓存管理还可以优化存储结构,减少查询时间,进一步提升开发体验。
然而,过多的缓存文件可能会占用系统空间,影响系统运行,因此需要定期清理无用的缓存文件。
7.2、npm缓存配置
- 查看缓存内容: 使用
npm cache ls [<name>@<version>]
命令可列出缓存中的所有包和文件;使用npm cache meta
命令可查看缓存的元数据。 - 清除缓存:
- 使用
npm cache clean --force
命令清除npm缓存目录中的所有数据。请注意,–force 参数是必须的,因为从npm v5开始,清除缓存不再是默认行为。 - 使用
npm cache verify
命令验证缓存数据的有效性,并删除任何不完整或过时的缓存文件,以确保缓存数据的完整性和一致性。
- 使用
- 设置缓存路径:
使用npm config set cache <path>
命令可设置缓存的存储路径。
设置后需验证配置是否成功,可使用npm config set cache "D:\Application\nodejs\npm-cache"
npm config get cache
命令查看当前缓存路径。
8、npm依赖安装与管理
npm依赖管理是Node.js开发中的一个核心概念。在npm中,依赖是指你的项目在运行或开发过程中需要的其他包(libraries)或模块。这些依赖项在项目的package.json文件中声明,并通过npm进行安装和管理。
8.1、依赖类型
-
dependencies(生产依赖): 这些依赖项是项目在生产环境中运行所必需的。它们通常是框架、库或其他项目功能实现所依赖的代码。例如,如果你的项目使用Express框架来构建Web应用,那么Express就会被列入dependencies。
-
devDependencies(开发依赖): 这些依赖项仅在开发过程中需要,如测试框架、构建工具、代码格式化工具等。它们在生产环境中不是必需的,但在开发、测试和构建过程中非常重要。例如,webpack、gulp等构建工具,以及Mocha、Jest等测试框架通常会被列入devDependencies。
-
peerDependencies(对等依赖): 这是一种特殊的依赖声明方式,用于声明包与其他包之间的“对等依赖”关系。这意味着你的包需要另一个包的存在才能正常工作,但并不会自动安装那个包。对等依赖通常用于插件系统或需要与其他库协同工作的库。
-
optionalDependencies(可选依赖): 这些依赖项不是必需的,但如果存在,项目可以利用它们提供额外的功能。如果可选依赖未能安装,npm将不会抛出错误。
-
bundledDependencies(捆绑依赖): 这些依赖项将在发布包时一起捆绑。这通常用于将多个包组合成一个单一的发布单元。
8.2、依赖安装
- 使用
npm install <package-name>
(或npm i <package-name>
)命令可以安装一个包,并将其添加到package.json文件的dependencies中。 - 使用
npm install --save-dev <package-name>
(或npm i -D <package-name>
)命令可以安装一个包,并将其添加到package.json文件devDependencies中。 - 有时候,我们需要一次性安装多个包。可以在命令后面依次列出这些包的名称,用空格分隔。
npm i moment jquery bootstrap
npm install
(或npm i
)命令,该命令会根据 package.json 文件中的 dependencies 和 devDependencies 字段来安装对应的包,并将它们存储在 node_modules 目录下。如果 package-lock.json 文件存在,npm 会优先根据 package-lock.json 文件来安装确切版本的依赖包,以确保项目依赖的一致性。
8.3、依赖卸载
在项目开发过程中,我们可能会遇到不再需要某些依赖包的情况。此时,可以使用npm提供的卸载命令来移除这些包。这样不仅可以保持项目的整洁,还能减少项目的体积。
- 使用
npm uninstall <package-name>
命令从项目中的node_modules 目录中移除指定的包,并更新 package.json 文件。 - 如果你想卸载一个全局安装的包,可以使用 -g 参数
npm uninstall <package-name> -g
- 有时候,我们需要一次性卸载多个包。可以在命令后面依次列出这些包的名称,用空格分隔。
npm uninstall moment jquery bootstrap
提示:
- 卸载后可以使用
npm list
或npm list -g
验证卸载结果,如果包已成功卸载,它将不会出现在列表中。 - 在某些情况下,卸载包后可能会遇到缓存问题。为了确保项目的干净状态,可以清理项目缓存。
8.4、依赖更新
随着项目的发展和外部库的更新,保持依赖包的最新状态可以确保你享受到最新的功能和安全修复。npm 提供了一系列命令来帮助你轻松地更新项目的依赖包。
- 使用
npm update
命令用于更新项目中所有依赖包到符合 package.json 中指定的版本范围内的最新版本。 - 使用
npm update <package-name> [--force]
命令更新某个特定的包,-g 参数用来定义更新全局包,有时候,依赖包可能存在一些不可预测的问题,导致 npm update 命令无法正确更新包。在这种情况下,可以使用--force
参数强制更新包。 - 添加 -g 参数,可更新全局包。
- 使用
npm outdated
命令,列出项目中所有过时的依赖包,帮助你及时更新。 - 如果你想将所有依赖包更新到最新版本,可以使用
npm install
命令,并结合 npx npm-check-updates 工具。// 1. 安装 npm-check-updates 工具 npm install -g npm-check-updates // 2. 运行以下命令来更新 package.json 文件中的所有依赖包版本 ncu -u // 3. 运行 npm install 命令来安装更新后的依赖包 npm install