通过导演电影讲解 Node 包管理器 (NPM)
如果你了解好莱坞电影的一般制作方式,那么你就能理解 Node 包管理器 (NPM)。
您是否知道 Node.js 的初始版本是由一名程序员 Ryan Dahl 于 2009 年编写的?
如今,在 2018 年,数百万开发人员已经使用 Node.js 为其 Web 应用程序创建后端。但是,Node 依赖于活跃的开源社区,在 Node 包管理器(NPM)中构建了许多专用包。NPM 由 Isaac Schlueter 于 2010 年创建。
Isaac 没有亲自开发所有这些专门功能有两个很好的理由:
- 开发人员不想使用一个庞大、笨重的框架,该框架是为了覆盖数百个用例而编写的
- 自己创建所有专用包会花费太长时间!
相反,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 应用程序使用的所有包时,我们实际上可以将其分为两类:
- 生产环境和本地使用的软件包
- 本地使用的软件包
Grunt是一个任务运行器,可以在命令行上自动执行重复命令。Nodemon会在服务器代码发生任何更改时自动重启服务器。
在你的 package.json 文件中,这些依赖项被分为两部分:dependencies 和 devDependencies。如下所示:
获取最新教程
你喜欢这个教程吗?查看Codeanalogies 博客,获取 HTML、CSS 和 JavaScript 概念的最新讲解。
文章来源:https://dev.to/kbk0125/node-package-manager-npm-explained-by-directing-a-movie-359