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