我們已經了解了npm的含義,以及它在Web開發中的作用和地位。接下來,我們將花一些時間了解命令行,因為它是我們與npm交互的方式。
命令行是一個我們可以輸入(不出所料)命令的地方,這些命令將由我們的計算機直接執行。它速度極快,並且比大多數試圖為您處理命令行的應用程序具有更高的管理員權限。需要在系統上安裝某些東西,或者更新它?命令行可以做到這一點,更不用說卸載它們了。甚至服務器端語言也可以在命令行上運行,從而打開了一系列工具和開發技術。
正因為這些原因,命令行被認為是許多開發人員不可或缺的工具。即使你不是開發人員,你也很可能在某個時候遇到過命令行。也許您在打開MacOS中的終端應用程序時訪問過它。也許您使用了直接內置在代碼編輯器中的命令行——VS Code和許多其他代碼編輯器都帶有集成終端。也許您甚至遇到過像iTerm或Hyper這樣的第三方終端應用程序。
如果您使用過終端,那麼您到目前為止的大部分命令行使用可能只是鍵入(或粘貼)其他人給您的命令。這很好;這通常是我們完成事情的方式。
但是,讓我們花一點時間來理解命令行究竟是什麼,以及為什麼它被如此廣泛地使用。
“命令行”和“終端”在技術上是兩種不同且截然不同的東西,但經常互換使用。您也可能聽到命令行被稱為“shell”,或者看到它縮寫為“CLI”,它是“命令行界面”的縮寫。
撇開那些吹毛求疵的區別不談,這些術語通常用於表示幾乎相同的意思。因此,為了盡可能簡單起見,從現在開始,我將互換使用它們。
無論您想稱它為什麼,您可能都將命令行視為那個看起來很嚇人的窗口,也許是黑色背景和白色(有時是綠色)文本,您可以在其中鍵入計算機似乎理解的命令,即使您不理解。
根據您在命令行上工作的位置和方式,您可能會注意到的一件不起眼的事情是美元符號字符$,它顯示在您可以開始鍵入的第一行上。您甚至可能在其他文章或文檔中看到過它。
通常約定用$字符作為命令的前綴——但這確實是一個令人困惑的約定。這是因為無需鍵入它。它實際上不是命令的一部分。相反,$表示一個要在終端中運行的命令。
所以這是關於使用命令行的第一個規則:如果您發現自己鍵入或複制包含$字符的指令,請知道無需在您的工作中包含它;終端已經包含它了。
<code>## 无需复制$ $ npm run build</code>
您可能會看到其他字符開始一行,而不是$,例如>,_,甚至箭頭。同樣,無論是什麼,它幾乎肯定不是要直接鍵入或粘貼到命令行中的。文檔或其他教程是否應該包含一行的起始字符是一個完全不同的討論(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章→
以上是深入查看命令行的詳細內容。更多資訊請關注PHP中文網其他相關文章!