接上一篇文章“npm到底是什么意思”,既然我們知道npm 代表什么,并且對(duì)它的作用以及它如何適應(yīng) Web 開(kāi)發(fā)有了一個(gè)非?;\統(tǒng)的了解,我們應(yīng)該花一點(diǎn)時(shí)間看看命令行,因?yàn)檫@是我們與 npm 交互的方式。
命令行概述
命令行是我們可以鍵入(可以預(yù)見(jiàn)的)命令以直接由我們的計(jì)算機(jī)執(zhí)行的地方。它非???,并且比大多數(shù)試圖為您處理命令行的應(yīng)用程序允許更多的管理員權(quán)限。需要在您的系統(tǒng)上安裝一些東西,或者更新它?命令行可以做到這一點(diǎn),更不用說(shuō)卸載它們了。哎呀,甚至服務(wù)器端語(yǔ)言也可以在命令行上運(yùn)行,從而打開(kāi)了廣泛的工具和開(kāi)發(fā)技術(shù)。
由于這些原因,命令行被認(rèn)為是許多開(kāi)發(fā)人員不可或缺的工具。即使您不是開(kāi)發(fā)人員,也有可能在某些時(shí)候遇到過(guò)命令行。也許您在 MacOS 中打開(kāi)終端應(yīng)用程序時(shí)已經(jīng)訪問(wèn)過(guò)它。也許您已經(jīng)使用了直接內(nèi)置于您的代碼編輯器中的一個(gè)——VS Code和許多其他代碼編輯器都帶有集成終端。也許您甚至遇到過(guò)iTerm或Hyper等第三方終端應(yīng)用程序。

如果您使用過(guò)終端,那么到目前為止您的大部分命令行使用可能只是簡(jiǎn)單地鍵入(或粘貼)其他人給您的命令。沒(méi)關(guān)系; 這通常是我們完成工作的方式。
但是,讓我們花點(diǎn)時(shí)間來(lái)了解一下命令行到底是什么,以及為什么它被如此廣泛地使用。
命令行與終端
“命令行”和“終端”在技術(shù)上是兩個(gè)不同且截然不同的事物,但通常可以互換使用。您可能還會(huì)聽(tīng)到稱(chēng)為“shell”的命令行或?qū)⑵淇s寫(xiě)為“CLI”,這是“命令行界面”的縮寫(xiě)。
除了迂腐的區(qū)別,這些術(shù)語(yǔ)通常用來(lái)表示幾乎相同的東西。因此,為了盡可能簡(jiǎn)單,我將從現(xiàn)在開(kāi)始交替使用它們。
打開(kāi)命令行
無(wú)論您想如何稱(chēng)呼它,您可能都知道命令行是那個(gè)看起來(lái)很?chē)樔说拇翱?,可能帶有深色背景和白色(有時(shí)是綠色)文本,您可以在其中鍵入計(jì)算機(jī)似乎可以理解的命令,即使您并不理解。

根據(jù)您在命令行上工作的位置和方式,您可能會(huì)注意到的第一件事是一個(gè)不顯眼的美元符號(hào)字符,$它顯示在您可以開(kāi)始輸入的第一行。您甚至可能在其他文章或文檔中看到過(guò)它。
在命令前加上一個(gè)字符是常見(jiàn)的約定$——但這確實(shí)是一個(gè)令人困惑的約定。那是因?yàn)椴恍枰I入它。它實(shí)際上不是命令的一部分。相反,$表示要在終端中運(yùn)行的命令。
所以這里是關(guān)于使用命令行工作的第一條規(guī)則:如果您發(fā)現(xiàn)自己正在鍵入或復(fù)制包含該字符的指令$,請(qǐng)知道沒(méi)有必要將它包含在您的工作中;終端已經(jīng)覆蓋了它。
您可能會(huì)在一行的開(kāi)頭看到其他內(nèi)容而不是$,例如>、_,甚至是箭頭。同樣,無(wú)論它是什么,它幾乎肯定不會(huì)直接輸入或粘貼到命令行中。
命令行有什么作用?
電影和電視節(jié)目通常將終端描繪成快速打字的黑客在黑暗、僻靜的房間里使用的東西。這部分是因?yàn)樗鼮槟切┛赡懿恢篮诳偷蹏?guó)中層疊字母的真正終端的人們提供了很好的娛樂(lè)。(他們也不應(yīng)該;我無(wú)法判斷電視節(jié)目中描繪的手術(shù)是否準(zhǔn)確,并且非常滿(mǎn)足于將這種區(qū)別留給專(zhuān)業(yè)人士。)
但命令行并不完全用于編寫(xiě)代碼。顧名思義,命令行就是用來(lái)寫(xiě)命令的。我想你可以說(shuō)所有編碼在某種程度上都是命令,所以這確實(shí)有點(diǎn)模糊。但一般來(lái)說(shuō),終端中的代碼與代碼編輯器中的代碼不同。相反,您使用終端通過(guò)您希望它立即運(yùn)行的命令控制您的計(jì)算機(jī)。
命令行的優(yōu)點(diǎn)
您可能想知道為什么開(kāi)發(fā)人員首先喜歡在命令行中工作。您可能更喜歡漂亮的應(yīng)用程序或圖形用戶(hù)界面(簡(jiǎn)稱(chēng) GUI,有時(shí)發(fā)音為“gooey”),您可以在其中查看所有選項(xiàng)并直觀地找到最佳選項(xiàng)。這很好,我們將在本章中稍微討論一下 GUI 并提供它們的示例。
許多開(kāi)發(fā)人員都有這種感覺(jué),即使它看起來(lái)不像。但是在命令行中工作會(huì)帶來(lái)一些在可視化應(yīng)用程序中并不總是容易復(fù)制的優(yōu)勢(shì)。
它授予你上帝般的系統(tǒng)特權(quán)
命令行是計(jì)算機(jī)科學(xué)人士所說(shuō)的“特權(quán)環(huán)境”。這聽(tīng)起來(lái)像是耶魯兄弟會(huì)的房子,但它只是意味著這是一個(gè)對(duì)你可以做的事情幾乎沒(méi)有限制的地方;沒(méi)有護(hù)欄的地方。
這就是命令行令人望而生畏的名聲的來(lái)源——無(wú)論您輸入什么命令,只要它有效,都會(huì)立即執(zhí)行,而且通常是不可逆轉(zhuǎn)的。它能夠與您的操作系統(tǒng)試圖阻止您編輯的隱藏文件進(jìn)行交互。您有權(quán)訪問(wèn)系統(tǒng)中的任何內(nèi)容。您甚至可以與遠(yuǎn)程服務(wù)器上的類(lèi)似核心文件進(jìn)行交互——我們都知道這樣的諺語(yǔ):這種能力伴隨著巨大的責(zé)任。
將命令行想象成一個(gè)懶惰的安全衛(wèi)士可能會(huì)有所幫助。它假定您始終知道自己在做什么,并讓您直接通過(guò)入口。這使它有點(diǎn)冒險(xiǎn),是的,但它也使它非常強(qiáng)大,并且是某些任務(wù)和項(xiàng)目的完美選擇。
超級(jí)快
命令行相對(duì)于典型應(yīng)用程序的另一個(gè)優(yōu)勢(shì)是:速度很快。
情況并非總是如此。命令行的速度往往被夸大了,并且在很大程度上取決于所討論的任務(wù)。但是當(dāng)它更快時(shí),它通常可以快很多倍。另外,命令行真正發(fā)揮作用的地方往往正是代碼項(xiàng)目最需要速度的地方,即下載和創(chuàng)建文件。
正如我們將在本指南的其他章節(jié)中看到的那樣,npm 所做的一個(gè)關(guān)鍵部分是在您的機(jī)器上安裝東西(通常在為您正在處理的項(xiàng)目指定的文件夾中)。這就是命令行非常適合與包管理器(我們也會(huì)了解它的含義)一起工作的原因,比如 npm——它在計(jì)算機(jī)之間下載和傳輸文件——通常比使用瀏覽器來(lái)做要快得多它。
命令行使 npm 能夠以驚人的速度生成大量文件。運(yùn)行單個(gè)命令以高速一次性安裝、更新或刪除這些文件的能力使終端成為許多工作中最快、最有效的工具。
它做了其他語(yǔ)言做不到的事情
在終端中工作如此有利的另一個(gè)原因是,它是您可能想要在項(xiàng)目中使用的許多工具已經(jīng)可供您使用的地方,無(wú)需任何額外設(shè)置。
但是,讓我們后退一點(diǎn)。
當(dāng)您聽(tīng)到“服務(wù)器端語(yǔ)言”一詞時(shí),您可能會(huì)想到 PHP、Ruby 或 Java。也許它甚至是該領(lǐng)域的新成員,例如 Rust 或 Go。您甚至可能已經(jīng)知道 Node 屬于該列表,但如果不知道,請(qǐng)?jiān)徫姨角懊嬉稽c(diǎn)。
不管怎樣,當(dāng)大多數(shù)人想到像這樣的服務(wù)器端語(yǔ)言時(shí),他們往往會(huì)想到 Web 服務(wù)器等待請(qǐng)求然后響應(yīng)它們。例如,WordPress 在收到啟動(dòng) PHP 的請(qǐng)求之前處于空閑狀態(tài)。當(dāng)您發(fā)送一條新推文時(shí),這是對(duì) Twitter 服務(wù)器的請(qǐng)求,最終會(huì)命中 Rails 中的 Ruby 方法。
可以說(shuō),服務(wù)器端語(yǔ)言被認(rèn)為比網(wǎng)絡(luò)語(yǔ)言更強(qiáng)大。HTML、CSS 和 JavaScript 很棒,但它們不能與文件系統(tǒng)一起工作、發(fā)送電子郵件、處理圖像、發(fā)出系統(tǒng)命令、與操作系統(tǒng)交互或運(yùn)行計(jì)劃任務(wù);在許多其他應(yīng)用程序或網(wǎng)站可能需要做的事情中。默認(rèn)情況下,瀏覽器中的 JavaScript 甚至無(wú)法運(yùn)行,除非有人在瀏覽器中主動(dòng)查看網(wǎng)頁(yè)。
將服務(wù)器端語(yǔ)言視為更強(qiáng)大的應(yīng)用程序和軟件背后的強(qiáng)大引擎是很正常的。而且,在許多情況下,這是準(zhǔn)確的。但是讓我們花點(diǎn)時(shí)間認(rèn)識(shí)到,為了運(yùn)行代碼,您的機(jī)器就是一臺(tái)服務(wù)器。雖然不是網(wǎng)絡(luò)服務(wù)器(它可能是一個(gè),但那會(huì)很奇怪而且可能是不明智的)。盡管如此,還是一臺(tái)服務(wù)器。
您可以安裝和運(yùn)行我們提到的任何服務(wù)器端語(yǔ)言,也許您甚至已經(jīng)在某些時(shí)候這樣做了(或至少?lài)L試這樣做)。您可能已經(jīng)安裝了 PHP,因此您可以運(yùn)行 WordPress(雖然現(xiàn)在有更好的方法可以做到這一點(diǎn)),或者您可能已經(jīng)安裝了 Ruby,以便您可以遵循一些關(guān)于 Rails 的教程,就像示例一樣。
或者可能不是。也許您以前從未安裝過(guò)一整套該死的編程語(yǔ)言。無(wú)論哪種方式,只要知道這些語(yǔ)言在服務(wù)器上運(yùn)行而不是在 Web 瀏覽器上運(yùn)行——為此,您的機(jī)器就是服務(wù)器。
除此之外,您可能希望在開(kāi)發(fā)工作流程中使用的許多工具(例如用于編譯 CSS 的 Sass)實(shí)際上在服務(wù)器端語(yǔ)言上運(yùn)行。因此,使用命令行會(huì)讓您置身于所有最強(qiáng)大的工具隨手可得的位置。
使用應(yīng)用程序而不是命令行
我們?cè)诒疚那懊婧?jiǎn)要介紹了 GUI。值得注意的是,一些命令行任務(wù)具有相應(yīng)的 GUI,這使得使用命令行更加直觀和程序化。
很好的例子包括GitHub Desktop(用于管理代碼存儲(chǔ)庫(kù))和CodeKit(用于處理、捆綁和編譯資產(chǎn)),盡管 VS Code 中的源代碼管理選項(xiàng)卡也符合條件。盡管像這樣的 GUI 通常專(zhuān)注于特定職責(zé),但它們可以讓您通過(guò)漂亮的可視化用戶(hù)界面在終端窗口之外的實(shí)際應(yīng)用程序窗口中完成工作。
作為一個(gè)選項(xiàng),GUI 很不錯(cuò),盡管這些年來(lái)我已經(jīng)很習(xí)慣在命令行上工作,但我仍然希望有更多的 GUI 來(lái)完成命令行使之成為可能的事情——兩者都是為了我自己的方便并降低新開(kāi)發(fā)人員的進(jìn)入門(mén)檻。
然而,我相信沒(méi)有更多此類(lèi)應(yīng)用程序的原因是因?yàn)樗俣取?gòu)建命令行界面 (CLI) 比組裝一個(gè)成熟的應(yīng)用程序要快得多,也容易得多,通常要快幾個(gè)數(shù)量級(jí)。所以如果我們今天想要美好的東西,命令行通常是我們需要去的地方。
如沒(méi)特殊注明,文章均為方維網(wǎng)絡(luò)原創(chuàng),轉(zhuǎn)載請(qǐng)注明來(lái)自http://723918.com/news/6783.html