通过导演电影讲解 Node 包管理器 (NPM)

2025-06-07

通过导演电影讲解 Node 包管理器 (NPM)

如果你了解好莱坞电影的一般制作方式,那么你就能理解 Node 包管理器 (NPM)。

您是否知道 Node.js 的初始版本是由一名程序员 Ryan Dahl 于 2009 年编写的?

如今,在 2018 年,数百万开发人员已经使用 Node.js 为其 Web 应用程序创建后端。但是,Node 依赖于活跃的开源社区,在 Node 包管理器(NPM)中构建了许多专用包。NPM 由 Isaac Schlueter 于 2010 年创建。

Isaac 没有亲自开发所有这些专门功能有两个很好的理由:

  1. 开发人员不想使用一个庞大、笨重的框架,该框架是为了覆盖数百个用例而编写的
  2. 自己创建所有专用包会花费太长时间!

相反,Ryan 知道,如果 Node 越来越流行,开发者就会愿意做出贡献。因此,他在 2010 年推出了 NPM,用于组织社区创建的所有软件包。

然而,作为一名初级 Web 开发人员,了解整个生态系统以及如何在本地计算机上访问它可能具有挑战性。

思考了一会儿之后,我意识到使用 NPM 有点像担任一部好莱坞电影的导演。你的工作就是协调一群人(或一些包)完成特定的功能,但又不至于让每个人都抓狂(或者让你的应用无法构建)。

这就是 NPM 的完整指南。为了理解本教程,你只需要了解前端和后端之间的区别

什么是 NPM?

想象一下,你是一部好莱坞新电影的导演。接受这个角色后,你需要立即开始招募演员和其他高管来与你一起创作这部电影。

当然,这引出了一个直接的问题:你会聘请哪些演员?你如何确保他们能够合作?如何在预算之内完成?

或者,你会采取完全不同的方向,尝试与相对不知名的演员从头开始组建完美的团队?

如果你想雇佣一个团队,你需要查阅某种目录来找到合适的人选。我不知道好莱坞是否有内部目录,但我想到了IMDB 。或者,在互联网出现之前的时代,可能甚至有一个实体目录。

就像 IMDB 拥有数千名演员的信息,您可以根据这些信息做出招聘决策一样,NPM 拥有数十万个提供特定功能的“包”。它们都是用 JavaScript 编写的,因此从技术上讲,您可以重写它们……但这不是重点。它们旨在通过即时提供新功能来简化您的工作。

这就像雇用一位知名演员/女演员一样——由于过去的经验,该人是某些类型角色的专家。

我们都知道连姆·尼森的特长

因此,作为开发者,您可以访问 NPM 注册表,将特定的软件包添加到您的 Web 应用中,这将使您的工作更加轻松。正如所有演员都建立了自己的职业生涯一样,所有 NPM 软件包都是由个人开发者或团队构建并贡献到注册表中的。

在你的代码中,所有这些包都会被记录在 package.json 文件中。所以,这个文件有点像电影中涉及的人员列表。以下是该列表的示例:

我们将在本教程的后面介绍这些版本。

软件包说明

假设你的电影有100个角色需要填补。如果你的预算无限,你会想让过去演过类似角色的著名演员来填补所有这些角色吗?

可能不会。每个人都想成为明星,为了角色的契合而打破常规。那简直是一场噩梦。但是,如果你只雇佣不知名的演员……拍一部优秀的电影会非常困难!毕竟,成为一名优秀的演员需要多年的经验积累。

同样,当您构建 Web 应用程序时,您不断面临一个选择:我可以自己构建此功能,还是应该使用包来完成任务?

你知道电影《超级骑警》吗?这是一部经典喜剧,预算只有 300 万美元。然而,大多数优秀电影的制作成本都在 1000 万到 1 亿美元之间。你可以从零开始构建一个令人惊叹的 Web 应用……但你可能更倾向于使用包。

假设你聘请了美国著名演员马克·沃尔伯格来出演你的电影。当马克加入你的电影时,他不仅仅是一个加入的人!他拥有一个支持他、助他成功的团队。一位厨师……一位教练……一位经纪人……

同样,每个单独的软件包都不是独立运行的。软件包作者也使用了其他 NPM 软件包来简化他们的工作。事实上,他们的软件包会与其他软件包共享一些依赖项,就像马克·沃尔伯格 (Mark Wahlberg) 可能会与其他演员共用一位私人厨师一样。

以下是流行包request的依赖项列表:

让我们回到上面的 package.json 示例:

当你将“ axios ”包添加到你的应用时,你添加的不仅仅是 axios 文件。你还会添加axios文件所需的任何依赖项(如果你之前没有在其他包中添加过它们)。这些依赖项并没有明确说明,但你始终可以在node_modules文件夹中找到它们。

这是 npm 的优势之一。当你添加新包时,你甚至不需要检查是否已经使用了所有支持该包所需的包。npm 会自动将这些包添加到你的目录中。

版本说明

你看到上面每个软件包旁边的三组数字了吗?那是版本号。由于开发人员会不断更新他们的软件包,你可以选择使用软件包的特定版本,或者自动使用最新版本。

因此,当你在项目中使用 40 个不同的软件包,并且它们都在不断变化时……你可能会发现兼容性问题。例如,当 React 发布其最新版本时,你的应用可能无法再按预期运行。这时测试就派上用场了,但这是另一个教程的主题。

可以将其想象成处于职业生涯不同阶段的演员。有些人可能在整个职业生涯中扮演类似的角色,而其他人则可能会发生巨大的变化。

年轻与年老的克林特·伊斯特伍德

使用命令行

将 Node 和 NPM 下载到本地计算机后,您可以立即使用各种命令来操作 NPM 目录。其中一个常用命令是:

npm 安装

如果要安装express包,请在命令行中输入:

npm 安装 express

然后,NPM 会将 Express 代码及其依赖项下载到你的本地计算机。这有点像雇佣一个新演员。或者:

npm 卸载 express

这就像从你的应用程序中“发射”快递包裹一样。

你可以在 package.json 文件的“scripts”部分添加新命令。一个常用的命令是“start”,意思是“开始运行 Node 服务器”。它看起来像这样:

有点像导演喊“开始!”。

依赖关系说明

到目前为止,我们只是简单地介绍了依赖项的概念。您的应用可能会包含一些仅在本地版本上运行的软件包,例如测试和转译工具。换句话说,您应该有一些仅在本地环境中使用的工具,而不是在生产版本中使用。

如果您需要复习一下 localhost 和 production 之间的区别,请查看本指南

想想拍一部电影需要投入多少时间和精力。只有一小部分时间是在正式拍摄现场,也就是摄像机拍摄的时候。在幕后,他们要花上几个小时背台词、在健身房举重、学习新的口音。为了提高团队效率,导演可能会为每一项工作聘请专门的教练。

因此,当我们查看 Node 应用程序使用的所有包时,我们实际上可以将其分为两类:

  1. 生产环境和本地使用的软件包
  2. 本地使用的软件包

Grunt是一个任务运行器,可以在命令行上自动执行重复命令。Nodemon在服务器代码发生任何更改时自动重启服务器。

在你的 package.json 文件中,这些依赖项被分为两部分:dependencies 和 devDependencies。如下所示:

获取最新教程

你喜欢这个教程吗?查看Codeanalogies 博客,获取 HTML、CSS 和 JavaScript 概念的最新讲解。

文章来源:https://dev.to/kbk0125/node-package-manager-npm-explained-by-directing-a-movie-359
PREV
关于冒名顶替综合症的真相
NEXT
通过举办户外野餐活动解释 JavaScript 的 apply、call 和 bind