我们已经了解了npm的含义,以及它在Web开发中的作用和地位。接下来,我们将花一些时间了解命令行,因为它是我们与npm交互的方式。
命令行是一个我们可以输入(不出所料)命令的地方,这些命令将由我们的计算机直接执行。它速度极快,并且比大多数试图为您处理命令行的应用程序具有更高的管理员权限。需要在系统上安装某些东西,或者更新它?命令行可以做到这一点,更不用说卸载它们了。甚至服务器端语言也可以在命令行上运行,从而打开了一系列工具和开发技术。
正因为这些原因,命令行被认为是许多开发人员不可或缺的工具。即使你不是开发人员,你也很可能在某个时候遇到过命令行。也许您在打开MacOS中的终端应用程序时访问过它。也许您使用了直接内置在代码编辑器中的命令行——VS Code和许多其他代码编辑器都带有集成终端。也许您甚至遇到过像iTerm或Hyper这样的第三方终端应用程序。
如果您使用过终端,那么您到目前为止的大部分命令行使用可能只是键入(或粘贴)其他人给您的命令。这很好;这通常是我们完成事情的方式。
但是,让我们花一点时间来理解命令行究竟是什么,以及为什么它被如此广泛地使用。
“命令行”和“终端”在技术上是两种不同且截然不同的东西,但经常互换使用。您也可能听到命令行被称为“shell”,或者看到它缩写为“CLI”,它是“命令行界面”的缩写。
撇开那些吹毛求疵的区别不谈,这些术语通常用于表示几乎相同的意思。因此,为了尽可能简单起见,从现在开始,我将互换使用它们。
无论您想称它为什么,您可能都将命令行视为那个看起来很吓人的窗口,也许是黑色背景和白色(有时是绿色)文本,您可以在其中键入计算机似乎理解的命令,即使您不理解。
根据您在命令行上工作的位置和方式,您可能会注意到的一件不起眼的事情是美元符号字符$,它显示在您可以开始键入的第一行上。您甚至可能在其他文章或文档中看到过它。
通常约定用$字符作为命令的前缀——但这确实是一个令人困惑的约定。这是因为无需键入它。它实际上不是命令的一部分。相反,$表示一个要在终端中运行的命令。
所以这是关于使用命令行的第一个规则:如果您发现自己键入或复制包含$字符的指令,请知道无需在您的工作中包含它;终端已经包含它了。
## 无需复制 $
$ npm run build
您可能会看到其他字符开始一行,而不是$,例如>,_,甚至箭头。同样,无论是什么,它几乎肯定不是要直接键入或粘贴到命令行中的。文档或其他教程是否应该包含一行的起始字符是一个完全不同的讨论(Chris已经详细讨论过)。无论哪种方式,它都可能令人困惑,所以我希望确保这一点被指出来。
电影和电视节目经常将终端描绘成黑客在黑暗、僻静的房间里使用的快速打字工具。部分原因仅仅是因为它为可能不知道真正的终端与《黑客帝国》中级联字母之间区别的人们提供了良好的娱乐效果。(他们也不应该;我无法判断电视节目中描绘的手术是否准确,并且完全满意地将这种区别留给专业人士。)
但是命令行并不完全用于编写代码。正如“命令行”这个名称所暗示的那样,它用于编写命令。我想你可以说所有编码在某种程度上都是命令,所以这无疑是一条模糊的界限。但一般来说,终端中的代码与代码编辑器中的代码编写方式不同。相反,您使用终端来指挥您的计算机运行您希望它立即运行的命令。
您可能想知道开发人员为什么首先喜欢在命令行中工作。您可能更喜欢一个不错的应用程序或图形用户界面(简称GUI,有时发音为“gooey”),您可以在其中看到所有选项并直观地找到最佳选项。这完全没问题,我们将在本章中讨论GUI并提供一些示例。
许多开发人员都有这种感觉,即使看起来不像。但是,在命令行中工作会带来一些视觉应用程序并不总是容易复制的优势。
命令行是计算机科学人员所说的“特权环境”。这听起来可能像是指耶鲁大学的兄弟会,但这仅仅意味着这是一个对您可以执行的操作几乎没有任何限制的地方;一个没有护栏的地方。
这就是命令行令人畏惧的名声的来源——无论您键入什么命令,只要它有效,就会立即执行,并且通常是不可逆转的。它能够与操作系统试图阻止您编辑的隐藏文件进行交互。您可以访问系统中的任何内容。您甚至可以与远程服务器上的类似核心文件进行交互——我们都知道那句谚语,伟大的责任伴随着这种权力。
将命令行视为懒惰的保安可能会有所帮助。它假设您总是知道自己在做什么,并让您直接通过入口。这确实有点冒险,是的,但它也使它非常强大,并且是某些任务和项目的完美选择。
命令行相对于典型应用程序的另一个优势是:它速度很快。
情况并非总是如此;命令行的速度往往被夸大,并且很大程度上取决于所讨论的任务。但是当它确实更快时,它通常可以快许多倍。此外,命令行真正闪光的地方往往正是代码项目最需要速度的地方,那就是下载和创建文件。
正如我们将在本指南的其他章节中看到的,npm 的一个关键部分是在您的机器上安装东西(通常是在您正在处理的项目的指定文件夹中)。这就是命令行非常适合与包管理器(我们也将了解这意味着什么)如npm一起工作的原因——它在计算机之间下载和传输文件——通常比使用浏览器执行此操作要快得多,得多。
命令行使npm能够以令人难以置信的速度生成大量文件。能够运行单个命令以闪电般的速度同时安装、更新或删除这些文件的能力使终端成为许多工作的最快、最有效的工具。
在终端中工作如此有利的另一个原因是,您可能希望在项目中使用的许多工具都可以在您无需任何额外设置的情况下使用。
但让我们稍微回顾一下。
当您听到“服务器端语言”这个词组时,您可能会想到PHP、Ruby或Java。也许是该领域的新成员,例如Rust或Go。您甚至可能已经知道Node属于该列表,但如果不是,请原谅我稍微提前一点。
无论如何,当大多数人想到这些服务器端语言时,他们往往会想到一个等待请求然后响应它们的Web服务器。例如,WordPress处于空闲状态,直到它收到启动PHP的请求。当您发送一条新推文时,那就是对Twitter服务器上的一个请求,最终会到达Rails中的Ruby方法。
服务器端语言被认为比Web语言更强大。HTML、CSS和JavaScript很棒,但它们无法处理文件系统、发送电子邮件、处理图像、发出系统命令、与操作系统交互或运行计划任务;以及应用程序或网站可能需要执行的许多其他事情。默认情况下,浏览器中的JavaScript甚至无法运行,除非有人正在浏览器中积极查看网页。
通常认为服务器端语言是更强大的应用程序和软件背后的强大引擎。并且,在许多情况下,这是准确的。但是,让我们花一点时间来认识到,为了运行代码,您的机器是一台服务器。不是Web服务器,尽管(它可以是一个,但这将很奇怪,而且可能不明智)。但无论如何都是一台服务器。
您可以安装和运行我们提到的任何服务器端语言,也许您在某个时候(或至少尝试过)已经这样做了。您可能安装了PHP以便您可以运行WordPress(尽管现在有更好的方法来做到这一点),或者您可能安装了Ruby以便您可以遵循一些关于Rails的教程,仅举几例。
或者,也许不是。也许您以前从未安装过整个编程语言。无论哪种方式,只需知道这些语言在服务器上运行,而不是在Web浏览器上运行——为此,您的机器就是一台服务器。
除此之外,您可能希望在开发工作流程中使用的许多工具——例如用于编译CSS的Sass——实际上在服务器端语言上运行。因此,使用命令行将您置于所有最强大的工具随时可用的位置。
我们在本文前面简要介绍了GUI。值得注意的是,某些命令行任务具有相应的GUI,这些GUI 使命令行的工作更直观和编程化。
很好的例子包括GitHub Desktop(用于管理代码存储库)和CodeKit(用于处理、捆绑和编译资产),尽管VS Code中的源代码管理选项卡也符合条件。即使这些GUI通常专注于特定任务,它们也允许您通过漂亮的视觉用户界面在终端窗口之外的实际应用程序窗口中完成任务。
GUI作为一种选择是很好的,尽管多年来我已经习惯了在命令行上工作,但我仍然希望有更多GUI来完成命令行使之成为可能的那些事情——为了我自己的方便和降低新开发人员的入门门槛。
但是,我相信没有更多此类应用程序的原因是速度。构建命令行界面 (CLI) 比构建完整的应用程序要快得多、更容易得多,通常要快几个数量级。因此,如果我们想要今天就得到好的东西,命令行通常是我们需要去的地方。
我们刚刚花了一些时间熟悉命令行。即使命令行不是特定于npm的,它也是与npm一起工作的核心。它是我们告诉系统做什么的界面,它赋予我们在系统或服务器级别上以极快的速度完成大量任务的惊人能力。作为包管理器,npm负责为Web项目安装、更新和删除文件(以及其他事情)。命令行是我们与npm通信以执行所有这些操作的方式。
接下来,我们将通过关注缩写中的第一个字母来更详细地分解npm是什么:“n”代表Node。那是什么,为什么它在名称中?这就是我们接下来关注的地方。
← 第2章 第4章 →
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3