Node.js 是一个开源的跨平台 JavaScript 运行时环境。在过去的几年里,由于其快速的输入/输出 (I/O) 性能和无与伦比的 JavaScript 语法。此外,它的自适应特性允许快速定制,使这种服务器技术在竞争对手中脱颖而出。
Node.js 包管理器 — 概述
Node.js Package Manager 或 npm 是 JavaScript 的默认包管理器。Npm 常用于在 Node.js 项目中安装项目脚本和操作外部模块。此外,它使用 package.json 文件(该文件位于项目的目录中)来跟踪项目中安装的模块。Npm 存储并记录以下信息:
- 项目所需的模块及其安装的版本(如果有)。
- 项目的元数据描述,其中包括作者和许可等详细信息。
- 用于自动执行与项目相关或以目标为导向的任务的可执行脚本。
在本教程中,我们将引导您完成结合 npm 和 package.json 使用 Node.js 模块的步骤。.
让我们开始吧!
前提条件
要学习本教程,您需要满足以下条件:
- Node.js 必须安装在您的系统中。
-
最新版本的 已安装的 Ubuntu 系统。
步骤 1:创建 package.json file
让我们以一个使用 Node.js locator 模块的虚拟项目为例开始我们的教程。该项目旨在收集用户的 IP 地址,并输出用户所在的国家/地区。由于我们的重点是理解 Node.js 模块与 npm 的配合使用,因此无需手动编写模块。相反,我们将在项目中使用预安装且可定制的包。
JSON 或 JavaScript Object Notation(JavaScript 对象表示法)是用于共享和传输数据的标准格式。最初,我们将创建一个 JSON 文件,用于存储和管理软件依赖项。然而,手动创建 package.json 是费力且耗时的。为了简单起见,我们将使用 init 命令来创建 package.json 文件,而不是费力地编写额外的代码块来从头编写我们的 JSON 。
-
init 命令
首先,让我们使用 mkdir 命令创建一个新文件夹,并将其命名为 locator:
|
1 |
mkdir locator |
接下来,使用 cd 命令进入新创建的文件夹:
|
1 |
cd locator |
然后, 输入 npm 以初始化交互式提示:
|
1 |
npm init |
之后,您将看到输出:

1. name
您将被引导至新项目的 name;即当前文件夹。您将在括号中看到默认值 ()。为了使本教程简单易懂,我们将采用默认选项。按下 回车键 以接受并继续。
2. version
下一个值是 version 名称,如果您在 npm 包仓库中共享项目,这是一个关键要求。
|
注意: Node.js 包遵循 语义化版本控制 (semver) 指南。 第一个数字: 主 版本,仅在 API 发生变化时才会更改。 第二个数字: 次 版本,在添加新功能时会更改。 最后一个数字: 修订 版本,在解决错误或缺陷时会更改。 |
3. description
The description 是一个描述 Node.js 模块工作流程的信息字符串。在我们的演示中, locator 项目将获取用户的 IP 地址并返回其来源国家/地区。
|
注意: 通常,模块会有一个 index.js 文件作为入口点。这也是 main 属性,即 package.json 的 main 属性,它是 npm 模块的入口点。但是,如果找不到 package.json, Node.js 将自动加载 index.js 。 |
4. test 命令
这是一个用于运行项目测试的可执行脚本或命令。由于测试超出了本教程的范围,让我们跳过它并按下 回车键.
5. init 命令
The init 命令将询问项目的 GitHub 仓库。同样,让我们跳过这部分并继续。
6. keywords
关键词 是用于搜索仓库的字符串数组。建议保持关键字准确且与您的项目相关,以便能够无缝追踪。
将这些 关键字 列为字符串,并用逗号隔开。在我们的项目中,请在提示符处输入 ip, country, latitude,以及 longitude,您将看到它们作为关键字包含在 package.json.
7. author
将 author 字段视为反馈以及与用户互动的一种方式。例如,如果用户在您的模块中发现错误,他们可以使用此字段通知您并使错误得到解决。
-
格式: "Name \<Email\> (Website)".
-
演示: "Paul\<paul@your_domain\> (https://your_domain)"
-
添加电子邮件和网站数据是可选的。但是,您可以指定一个有效的作者,并将您的联系信息添加为 author。确认详细信息并按 ENTER.
8. license
The license 字段说明了用户在使用您的模块时必须了解的法律条款和条件。由于 Node.js 模块是开源的, npm 会自动将其配置为 ISC-license 。
导航到开源许可证页面,并选择最适合您需求的 Open Source Initiative 。如果您不需要为您的仓库提供许可证,请在提示符处输入 UNLICENSED 。在我们的教程中,我们将使用默认的 ISC 许可证。按 ENTER 以完成此过程。
The init 命令将创建 package.json 文件并显示结果:

接下来,按 ENTER 继续并创建 package.json 文件。我们的 JSON 文件将记录我们将在项目中安装的所有模块和包。
在下一步中,我们将安装依赖项和 Node.js 模块。
第 2 步:安装依赖项和模块
创建自定义的外部库非常耗时且需要付出艰苦的努力。或者,最有效的方法是安装预定义的依赖项和外部库。在我们的教程中,我们将使用 HTTP 库,以允许我们的演示定位器模块发出外部 API 请求来收集地理数据。
在本指南中,我们将使用 axios 库来发送 HTTP 请求。首先,让我们 安装 axios:
|
1 |
npm install axios --save |
首先安装 npm 包,然后通过空格分隔列出它们。此外,请包含 --save 标签,以确保该项目被保存为项目依赖项。
您将看到输出:

打开 package.json ,使用 nano 或您选择的任何文本编辑器:
|
1 |
nano package.json |
请注意代码块底部突出显示的、新添加的属性:

-
下载开发依赖项
开发依赖项是项目开发中使用的包,在项目的生产或维护中没有用处。虽然这些依赖项在生产环境中听起来可能不起作用,但在编写和重写代码时起着重要作用。
与代码 linter 类似,开发依赖项在软件开发中起着至关重要的作用。通常,开发人员使用 代码 linter 来在项目开发过程中保持样式的一致性和统一性,否则这在生产中是无用的。
让我们安装一个 linter 作为您项目的开发依赖项。此外,使用 --save-dev 标志将 eslint 保存为开发所需的依赖项:
|
1 |
npm i eslint@6.0.0 --save-dev |
我们添加了 @6.0.0 到我们的依赖项中,以便在我们更新模块时,它们会被标记上版本。符号 @ 将通知 npm 去搜索您想要安装的特定标签。现在,重新打开 package.json 文件:
|
1 |
nano package.json |
您将看到输出:

- 自动生成的文件: node_modules 和 package-lock.json
开始时,在向 Node.js 项目安装包时, package.json 和 package-lock.json 文件会自动创建。在工作目录中确认这些文件:
![]()
由于大多数安装的依赖项都存储在 node_modules 文件夹,建议不要将此文件夹提交到您的版本控制仓库中。随着安装的依赖项数量增加, node_modules 的大小也会增加。
相反, package-lock.json 文件记录了安装的确切版本,因此无需显式包含 node_modules。与 node_modules 文件夹不同,您可以将此文件提交到您的版本控制仓库中,因为它详细展示了您的所有依赖项及其版本。
- 使用 package.json
The package.json 和 package-lock.json 文件允许您在启动项目开发之前设置相同的项目依赖项。导航到您的目录树,并在与 locator 相同的目录层级中创建一个新文件夹。将新文件夹命名为 cloned_locator:
|
1 2 |
cd .. mkdir cloned_locator |
接下来,移动到 cloned_locator:
|
1 |
cd cloned_locator |
将 package.json 和 package-lock.json 文件从 locator 导入到 cloned_locator:
|
1 |
cp ../locator/package.json ../locator/package-lock.json . |
这里的 . 表示当前文件夹。使用以下命令安装所需的模块:
|
1 |
npm i |
最初,npm 将检查 package-lock.json 文件以安装模块。如果 lock 文件不可用,它将读取 package.json 文件来确定要安装的内容。
通常,从 package-lock.json 安装非常简单,因为 lock 文件包含模块及其依赖项的确切版本。这意味着当您使用 安装时,package.json, npm 将节省确定兼容且稳定版本所需的额外时间。
通过添加 --production 标签来忽略开发依赖项:
|
1 |
npm i --production |
之后,返回 locator:
|
1 |
cd ../locator |
- 全局安装
到目前为止,我们已经本地安装了 npm 模块。但是,您也可以选择全局安装包,并通过 shell 命令或 CLI 使用它们。例如,您可以使用 Hexo 库来导航当前的 locator 项目并管理您的静态网站。使用以下带有 -g 标签的命令来全局安装 Hexo CLI:
|
1 |
npm i hexo-cli -g |
|
注意: 如果在全局安装包时遇到错误,请尝试使用 sudo npm i hexo-cli -g 命令并提供 root 凭据。 |
使用以下命令验证包是否已成功安装:
|
1 |
hexo --version |
您将看到输出:

步骤 3:管理和更新模块
包管理器不仅仅是安装 Node.js 模块。它还提供了许多自定义选项,您可以根据需要列出、更新、卸载模块,甚至添加安全层。
在本节中,我们将学习如何:
-
列出模块
-
更新模块
-
卸载模块
-
审计模块
让我们详细讨论每一个:
-
列出模块
顾名思义,列出模块将为您提供项目中安装的所有模块的详细信息。无需阅读 package.json 文件,您可以使用 ls 或 list 命令来详细了解您的项目模块:
|
1 |
npm ls |
您将看到输出:

默认情况下, ls 命令会列出整个依赖树,其中包括项目依赖项及其依赖的模块。但是,您也可以获得一个鸟瞰图,并显式针对特定模块。使用以下命令查看已安装但未包含其依赖项的模块:
|
1 |
npm ls --depth 0 |
您将看到输出:

-
更新模块
建议始终保持您的 npm 模块处于最新状态,以免遇到任何软件崩溃或冲突。使用以下命令检查是否需要更新:
|
1 |
npm outdated |
您将看到输出:

让我们详细了解每个术语:
- Package(包): 它列出了当前安装在项目中的 Package 。
- Current(当前版本): 这显示了包的 Current 版本。
- Wanted(期望版本): 显示 npm 版本,该版本最符合以下文件中的版本要求: package.json.
- 最新版本: 它显示了最新的 npm 发布版本,如果需要,您必须进行更新。
- 位置: 该包的 Location 在依赖树中。
如前所述,我们可以将我们的 npm 更新到稳定版本。使用以下命令更新您当前的包:
|
1 |
npm up eslint |
您将看到以下输出:

除了逐个更新它们之外,您还可以使用以下命令一次性更新所有模块: up 命令:
|
1 |
npm up |
-
卸载模块
很多时候,依赖项可能不会显示预期的输出,您需要创建自定义依赖项。在这种情况下,您可以选择从您的 package.json 和 package-lock.json 文件中卸载依赖项。假设您将 axios 作为依赖项,但它未能提供令人满意的结果。您无疑会从项目中删除此仓库。使用 uninstall 或 un 命令来删除 axios:
|
1 |
npm un axios |
您将看到以下输出:

虽然 uninstall 命令删除了该依赖项,但我们没有收到任何关于其删除的通知。让我们列出依赖项,看看我们现在有多少个依赖项:
|
1 |
npm ls --depth 0 |
您将看到输出,列表中没有 axios 依赖项:

-
审计模块
如果项目中安装的依赖项容易受到任何潜在的安全威胁,您可以检测它们。首先,您需要安装一个过时版本的 request 模块,以查看审计模块是如何工作的:
|
1 |
npm i request@2.60.0 |
您将看到提示修复威胁或漏洞的输出:

要展开有关漏洞 and 威胁的详细信息,请使用 audit 命令:
|
1 |
npm audit |
您将看到一份详细的安全报告:

要解决这些漏洞,请使用 fix 命令:
|
1 |
npm audit fix |
您将看到以下输出:

您可能已经注意到,九个漏洞中有两个已被修复。然而,其余七个漏洞仍然存在于您的依赖项中,因为 audit fix 并不能解决所有问题。为了解决这个问题,您可能需要使用不同的 API 将依赖项更新到更高的版本。更新时请务必小心,因为这有可能会破坏依赖树中更上层的代码。使用以下命令确认漏洞已消失:
|
1 |
npm audit fix --force |
在使用不同的 API 来解决漏洞威胁时要多加注意,因为如果您对此不确定,可能会导致代码功能损坏。
结论
总之,我们演示了如何将 Node.js 模块与 npm and package.json 结合使用。此外,我们还介绍了列出、更新、管理、审计和卸载包依赖项的方法。作为下一个挑战,我们鼓励您使用本指南中讨论的概念,并亲自尝试安装和测试包。您还可以尝试 构建 Node.js 应用程序 并 配置依赖项 以提升您的学习效果。
此外,您还可以在 Node.js 和 JavaScript 主题的许多其他学习材料,这些都可以在 我们的博客上找到:
- 在 CentOS 8 上安装 Node.js:完整指南
- 将 PostgreSQL 与 Node.js 应用程序连接:教程
- 在 React 应用程序中使用 HTTP 客户端 Axios:教程
- 如何在 Ubuntu 20.04 上使用 Docker 部署 Node.js (Express.js) 应用程序
祝您计算愉快!
评论
暂无评论。发表第一条评论吧。