首頁 >web前端 >css教學 >軟件包經理是什麼?

軟件包經理是什麼?

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原創
2025-03-15 09:59:08960瀏覽

What the Heck is a Package Manager?

在本npm 指南中,我們已經對npm 有了大致的了解——它代表Node 包管理器。在此過程中,我們討論了命令行的重要性以及它如何與npm 一起使用。

我們還專門研究了npm 中的“n”——Node——並了解到Node 非常類似於我們在瀏覽器中運行網站的JavaScript 代碼。事實上,Node就是JavaScript;它只是在瀏覽器外部運行,並且能夠執行與其基於瀏覽器的對應物不同的操作。

指南章節

  1. 本指南面向誰?
  2. “npm”到底是什麼意思?
  3. 命令行是什麼?
  4. Node是什麼?
  5. 包管理器是什麼? (您現在所處位置!)
  6. 如何安裝npm?
  7. 如何安裝npm 包?
  8. npm 命令是什麼?
  9. 如何安裝現有的npm 項目?

“包”的含義

現在讓我們關注npm 中的最後兩個字母,即“包管理器”部分。為了充分理解npm 是什麼,我們需要知道包管理器是什麼。因此,很自然地,為了理解,我們需要了解“包”到底是什麼。

”是一個總稱,用於您添加到項目中並以某種方式使用的任何外部代碼文件。也許您過去曾在項目中使用過jQuery、Bootstrap 或Axios。這些是包的常見示例。

我們稱它們為“包”,因為它們已“打包”並準備好使用。某些語言稱它們為其他名稱(例如,Ruby 稱它們為“gem”),但概念相同。為了避免過度簡化,是您沒有編寫但從某些公共來源獲取以用於項目的代碼。您知道的,第三方代碼。

或者,如果您更喜歡使用助記符的音樂模仿:

?當您選擇代碼時?不是您的,但您使用?這是一個包?當您安裝的東西時?您導入並調用, ?這是一個包

包也經常被稱為“依賴項”,因為您編寫的代碼依賴於它們的存在。例如,使用jQuery 的$ 編寫的代碼如果jQuery 本身沒有加載,將無法正常工作。 (因此,包管理器有時也稱為“依賴項管理器”。)

就包含的代碼量而言,包的大小可能會有所不同。一個包可能執行一些巨大的操作,從而改變您編寫整個項目的方式(例如整個框架),或者它可能執行一些非常小的、專注的操作,您只需在需要的地方添加即可(例如小部件或特定任務的輔助程序)。

不使用包管理器使用包

如果您過去使用過包,很可能您只是在HTML 中使用腳本標籤將其應用於從外部URL(理想情況下是從CDN)提取的腳本標籤。以下是您如何在網站的HTML 中包含jQuery 的方法:

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

另一種方法是下載包的副本,將其添加到項目的文件夾中,然後鏈接到它,如下所示:

<script src="./js/jquery-3.6.0.min.js"></script>

包管理器解決的問題

多年來,這兩種方法都運行良好。它很簡單。它很乾淨。就包而言,它通常可以讓您“設置並忘記”。那麼為什麼您還需要其他東西呢?

您可以想像,對於可以方便地使用公共交通工具或不需要長途旅行的人來說,擁有汽車可能看起來並不吸引人。 (這將與包管理器討論相關,我保證。堅持下去。)

如果您方便地使用高效的公共交通工具,那麼為一台大型機器支付高昂的價格,您必須將其存儲在某個地方,定期清潔、維護和加註昂貴的燃料,從您的角度來看,可能不會帶來太大的好處。在這種特定情況下,好處微不足道;成本相對來說是壓倒性的。處於這種假設位置的人甚至可能會想知道為什麼有人想要汽車!

我提出這個類比是因為當它解決您沒有的問題時,學習一項新技術可能非常困難,這與購買汽車可能無法解決您已經擁有的交通工具非常相似。它可能看起來像是一筆巨大的、不必要的支出。

那麼,包管理器解決的問題更多的是規模和處理問題。只要:

  • 您擁有的項目數量是可以管理的;
  • 在項目上工作的人數是可以管理的;
  • 需要對包進行的更新數量是可以管理的;而且,最重要的是,
  • 項目中使用的每個包都是客戶端(瀏覽器)JavaScript 或CSS。

最後一個是最重要的,因為如果您在瀏覽器中運行程序,那麼您將永遠無法使用大量的工具(稍後將詳細介紹)。

如果您確實選中了所有這些複選框,那麼您可能永遠不會超過這種方法。您的開發方法可能看起來像這樣:

但即使在這種情況下,當您有多個<script> 标签时,每个标签都链接到某个脚本或库的特定版本,那么<em>唯一可以查看您正在使用哪些包以及它们是否是最新的方法是手动打开 HTML 并查看代码。</script>

这本身并不是什么大问题,但随着项目规模和范围的扩大,这个问题呈指数级增长。您也许可以手动跟踪几个包,但是当我们谈论的是数百个——如果不是数千个——包时,您怎么可能做到这一点呢?即使您可以手动跟踪这些包,这仍然会带来人为错误的高风险。

HTML 的工作不是成为项目中所有使用的包的真相来源。 除了混合关注点外,在尝试合并团队成员之间不相关的作品时,它还可能导致冲突。

所有这些都很重要,但只是更大问题的一小部分。请了解,客户端 JavaScript 可能不是您永远想要包含在项目中的唯一类型的包,即使目前是这样——这就是事情真正开始崩溃的地方。

许多生产应用程序使用以下工具和包的某种组合,如果不是全部的话:

  • Sass(使编写 CSS 更容易)
  • PostCSS(增强 CSS 以实现最大的效率和兼容性)
  • Babel(转换较新的 JavaScript 以在较旧的浏览器中运行)
  • TypeScript(向 JavaScript 添加类型检查)
  • 由自动刷新浏览器以显示您的更改的开发服务器提供的热模块重新加载
  • 用于代码捆绑、缩小和/或连接的其他实用程序
  • 自动图像压缩
  • 测试库
  • 代码检查器

所有这些听起来都很棒——而且确实很棒!——但是请注意,您现在有多个依赖项,这些依赖项不仅不存在于您的 <script></script> 标签中,而且根本没有在您的项目中任何地方说明!任何人都无法知道——包括您未来的自己——使用了哪些工具或需要哪些工具才能使该项目运行。

即使您可以通过这种方式准确地知道项目需要什么,您仍然需要自己手动找到、下载和安装所有这些包。根据项目的情况,这很容易成为一天或更长时间的任务。

所有这一切都意味着您的工作流程现在看起来更像这样:

所有上述工具都非常方便,您仍然需要管理它们。 依赖项也是项目,它们发布更新以修复错误并引入新功能。因此,简单地在 HTML 中粘贴一个指向 CDN 上包的链接的 <script></script> 标签然后认为它已经完成是不现实的。您必须确保每件事不仅在您的机器上安装并正常工作,而且在每个协作者的机器上也正常工作。

包管理器存在是为了使项目的包——或依赖项——易于管理,方法是知道安装了什么、有什么可更新的以及一个包是否可能与另一个包冲突。包管理器的优点是它可以直接从命令行完成所有这些操作,并且工作量最少。

许多包管理器,尤其是 npm,还提供其他功能,这些功能可以打开更多可能性,从而使开发更高效。但是管理包是主要吸引力。

有些包管理器不是 npm

这部分与 npm 本身无关,但为了完整起见,我还应该提到 npm 不是唯一的 JavaScript 包管理器。例如,您可能会在代码示例中看到 Yarn 的引用。Yarn 和 npm 的工作方式非常相似,它们之间的大量互操作性是特意构建的。

有些人更喜欢一个包管理器而不是另一个包管理器。就我个人而言,我认为 npm 和 Yarn 之间的差异最初更为明显,但现在两者比以往任何时候都更加相似。

您可能会看到代码示例(包括 CSS-Tricks 文章中的一些示例),这些示例同时引用 yarn 和 npm。这是为了让读者知道这两种方法都可以,而不是需要同时使用它们。

Yarn 和 npm 的语法有时有所不同,但当只有一个存在时,通常可以轻松地将命令或项目从一个转换为另一个。从功能上讲,您使用哪一个很少(如果有的话)很重要——当然,除了所有在同一项目上一起工作的人都需要使用相同的包管理器以确保兼容性和一致性之外。

虽然 npm 和 Yarn 构成了开发人员使用的绝大多数包管理器,但还有一个名为 PnPm 的包管理器实际上是 npm,但性能更高、效率更高。权衡是 PnPm 在某些情况下需要更多技术知识,因此它更高级。

使 npm 成为“标准”包管理器的因素

同样,我只是提出其他包管理器是为了说明 npm 不是唯一存在的包管理器——但它通常是标准的。

是什么使它成为包管理器中的“标准”?包括 Ruby 和 PHP 在内的其他语言多年来都有包管理器;在 npm 之前,JavaScript 实际上没有任何好的包管理器。

npm 最初是一个独立的开源项目,但在 2020 年被微软收购。它技术上包含两个部分:实际的包管理器本身;以及包注册表,这是一个不断增长的列表,其中包含近 200 万个可供安装的包。

您可以将 npm 视为您可能想要在前端或基于 Node 的项目中使用的任何东西的应用程序商店。找到您想要的东西并通过命令行将其安装到您的系统。当发布新版本时,您可能会更新该包,或者如果项目不再依赖它,则完全删除它。

关于 npx 的说明

您也可能会看到 npx 命令出现。npx 实际上是 npm 的一部分,但是通过在命令中使用 npx 而不是 npm,您可以执行包的代码,而不会 永久 安装它。NPX 只安装它需要的东西,运行它,然后将其删除。

例如,如果您想运行安装程序脚本,这将很有用。npx 不需要下载安装程序,然后运行它,它允许您直接运行安装程序,之后不会在您的机器上留下任何东西。它就像一个清理自己东西的客人。

另一个很酷的例子:如果您只想编译项目中的 Sass 文件一次,而不必费心完全安装 Sass,您可以运行 npx sass(以及必要的输入和输出参数)。在大多数情况下,这可能不切实际,但如果您只是需要在这里和那里进行快速的一次性编译,那么 npx 将是一种方便的方法,因为它意味着需要更新和维护的已安装包更少。

接下来的步骤

好的,这就是我们称某个东西为包管理器时所指的深入探讨。对于 npm 而言,它专门用于安装和管理 Node 包,这些工具有助于向项目添加功能、添加方便的开发人员便利性……或所有上述内容!

接下来,我们将迈出使用 npm 的第一步。为此,我们需要将其安装到我们的系统中。这是本 npm 完全指南中的下一步。

← 第 4 章 第 6 章 →

以上是軟件包經理是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn