”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 深入探秘命令行使用技巧

深入探秘命令行使用技巧

发布于2025-04-14
浏览:610

A Deep Look at the Command Line

我们已经了解了npm的含义,以及它在Web开发中的作用和地位。接下来,我们将花一些时间了解命令行,因为它是我们与npm交互的方式。

指南章节

  1. 本指南面向谁?
  2. “npm”到底是什么意思?
  3. 命令行是什么?(您当前位置!)
  4. Node是什么?
  5. 包管理器是什么?
  6. 如何安装npm?
  7. 如何安装npm包?
  8. npm命令是什么?
  9. 如何安装现有的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章 →

最新教程 更多>
  • 如何有效地选择熊猫数据框中的列?
    如何有效地选择熊猫数据框中的列?
    在处理数据操作任务时,在Pandas DataFrames 中选择列时,选择特定列的必要条件是必要的。在Pandas中,选择列的各种选项。选项1:使用列名 如果已知列索引,请使用ILOC函数选择它们。请注意,python索引基于零。 df1 = df.iloc [:,0:2]#使用索引0和1 c...
    编程 发布于2025-05-03
  • 如何使用Python理解有效地创建字典?
    如何使用Python理解有效地创建字典?
    在python中,词典综合提供了一种生成新词典的简洁方法。尽管它们与列表综合相似,但存在一些显着差异。与问题所暗示的不同,您无法为钥匙创建字典理解。您必须明确指定键和值。 For example:d = {n: n**2 for n in range(5)}This creates a dicti...
    编程 发布于2025-05-03
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-05-03
  • 在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    在JavaScript中如何获取实际渲染的字体,当CSS字体属性未定义时?
    Accessing Actual Rendered Font when Undefined in CSSWhen accessing the font properties of an element, the JavaScript object.style.fontFamily and objec...
    编程 发布于2025-05-03
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-05-03
  • 解决Spring Security 4.1及以上版本CORS问题指南
    解决Spring Security 4.1及以上版本CORS问题指南
    弹簧安全性cors filter:故障排除常见问题 在将Spring Security集成到现有项目中时,您可能会遇到与CORS相关的错误,如果像“访问Control-allo-allow-Origin”之类的标头,则无法设置在响应中。为了解决此问题,您可以实现自定义过滤器,例如代码段中的MyFi...
    编程 发布于2025-05-03
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符在postgresql中提取最后一行,您可能需要遇到与数据集合中每个不同标识的信息相关的信息。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: id dat...
    编程 发布于2025-05-03
  • 如何在无序集合中为元组实现通用哈希功能?
    如何在无序集合中为元组实现通用哈希功能?
    在未订购的集合中的元素要纠正此问题,一种方法是手动为特定元组类型定义哈希函数,例如: template template template 。 struct std :: hash { size_t operator()(std :: tuple const&tuple)const {...
    编程 发布于2025-05-03
  • 如何简化PHP中的JSON解析以获取多维阵列?
    如何简化PHP中的JSON解析以获取多维阵列?
    php 试图在PHP中解析JSON数据的JSON可能具有挑战性,尤其是在处理多维数组时。要简化过程,建议将JSON作为数组而不是对象解析。执行此操作,将JSON_DECODE函数与第二个参数设置为true:[&&&&& && &&&&& json = JSON = JSON_DECODE($ j...
    编程 发布于2025-05-03
  • Java开发者如何保护数据库凭证免受反编译?
    Java开发者如何保护数据库凭证免受反编译?
    在java 在单独的配置文件保护数据库凭证的最有效方法中存储凭据是将它们存储在单独的配置文件中。该文件可以在运行时加载,从而使登录数据从编译的二进制文件中远离。使用prevereness class import java.util.prefs.preferences; 公共类示例{ 首选项...
    编程 发布于2025-05-03
  • 如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    appEngine静态文件mime type override ,静态文件处理程序有时可以覆盖正确的mime类型,在错误消息中导致错误消息:“无法猜测mimeType for for file for file for [File]。 application/application/octet...
    编程 发布于2025-05-03
  • `console.log`显示修改后对象值异常的原因
    `console.log`显示修改后对象值异常的原因
    foo = [{id:1},{id:2},{id:3},{id:4},{id:id:5},],]; console.log('foo1',foo,foo.length); foo.splice(2,1); console.log('foo2', foo, foo....
    编程 发布于2025-05-03
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 在使用Chrome and IE9中的图像时遇到的一个频繁的问题是围绕图像的持续薄薄边框,尽管指定了图像,尽管指定了;和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下...
    编程 发布于2025-05-03
  • 如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    如何使用Java.net.urlConnection和Multipart/form-data编码使用其他参数上传文件?
    使用http request 上传文件上传到http server,同时也提交其他参数,java.net.net.urlconnection and Multipart/form-data Encoding是普遍的。 Here's a breakdown of the process:Mu...
    编程 发布于2025-05-03
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月份)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将...
    编程 发布于2025-05-03

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3