Was zum Teufel ist die Kommandozeile?

Avatar of Josh Collinsworth
Josh Collinsworth am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Nachdem wir nun wissen, wofür npm steht und eine allgemeine Vorstellung davon haben, was es tut und wie es in die Webentwicklung passt, sollten wir uns etwas Zeit nehmen, um uns mit der Kommandozeile zu beschäftigen, da sie die Art und Weise ist, wie wir mit npm interagieren.

Kapitel des Leitfadens

  1. Für wen ist diese Anleitung?
  2. Was zum Teufel bedeutet „npm“?
  3. Was zum Teufel ist die Kommandozeile? (Hier sind Sie!)
  4. Was zum Teufel ist Node?
  5. Was zum Teufel ist ein Paketmanager?
  6. Wie zum Teufel installiert man npm?
  7. Wie zum Teufel installiert man npm-Pakete?
  8. Was zum Teufel sind npm-Befehle?
  9. Wie zum Teufel installiert man ein bestehendes npm-Projekt?

Ein Überblick über die Kommandozeile

Die Kommandozeile ist ein Ort, an dem wir (vorhersagbar genug) Befehle eingeben können, die direkt von unserem Computer ausgeführt werden. Sie ist extrem schnell und gewährt mehr Admin-Rechte als die meisten Apps, die versuchen, die Kommandozeile für Sie zu handhaben. Müssen Sie etwas auf Ihrem System installieren oder vielleicht aktualisieren? Die Kommandozeile kann das tun, ganz zu schweigen davon, es auch zu deinstallieren. Sogar serverseitige Sprachen können über die Kommandozeile ausgeführt werden, was eine breite Palette von Werkzeugen und Entwicklungstechniken eröffnet.

Aus diesen Gründen wird die Kommandozeile für viele Entwickler als unverzichtbares Werkzeug angesehen. Selbst wenn Sie kein Entwickler sind, sind Sie wahrscheinlich schon einmal auf die Kommandozeile gestoßen. Vielleicht haben Sie darauf zugegriffen, als Sie die Terminal-App unter MacOS geöffnet haben. Vielleicht haben Sie eine verwendet, die direkt in Ihren Code-Editor integriert ist – VS Code und viele andere Code-Editoren verfügen über ein integriertes Terminal. Vielleicht sind Sie sogar auf Drittanbieter-Terminal-Apps wie iTerm oder Hyper gestoßen.

A collage of screenshots showing a terminal and the command line in different applications.

Wenn Sie das Terminal verwendet haben, ist es möglich, dass Sie bisher hauptsächlich Befehle eingegeben (oder kopiert) haben, die Ihnen jemand anderes gegeben hat. Das ist in Ordnung; so erledigen wir oft die Dinge.

Aber nehmen wir uns einen Moment Zeit, um genau zu verstehen, was die Kommandozeile ist und warum sie so weit verbreitet ist.

Kommandozeile vs. Terminal

Die „Kommandozeile“ und das „Terminal“ sind technisch gesehen zwei verschiedene und unterscheidbare Dinge, werden aber oft austauschbar verwendet. Sie hören vielleicht auch, dass die Kommandozeile als „Shell“ bezeichnet wird oder als „CLI“ abgekürzt wird, was für „Command Line Interface“ steht.

Abgesehen von pedantischen Unterscheidungen bedeuten die Begriffe oft ziemlich dasselbe. Um es so einfach wie möglich zu halten, werde ich sie ab sofort austauschbar verwenden.

Die Kommandozeile öffnen

Wie auch immer Sie es nennen wollen, Sie kennen die Kommandozeile wahrscheinlich als dieses furchteinflößend aussehende Fenster, vielleicht mit einem dunklen Hintergrund und weißem (manchmal grünlichem) Text, in das Sie Befehle eingeben, die Ihr Computer zu verstehen scheint, auch wenn Sie es nicht tun.

Screenshot of a blank open terminal window with a dark background.
Standardmäßig sieht ein Terminalfenster wahrscheinlich ungefähr so aus, auch wenn sein Aussehen variieren kann.

Abhängig davon, wo und wie Sie auf der Kommandozeile arbeiten, wird Ihnen vielleicht als Erstes ein unscheinbares Dollarzeichen, $, auffallen, das in der ersten Zeile angezeigt wird, wo Sie mit der Eingabe beginnen können. Sie haben es vielleicht sogar in anderen Artikeln oder Dokumentationen gesehen.

This screenshot of Vue’s documentation for using npm includes the $ character in a command example.

Es ist üblich, Befehle mit einem $-Zeichen zu versehen – aber es ist sicher eine verwirrende Konvention. Das liegt daran, dass es nicht nötig ist, es einzugeben. Es ist buchstäblich kein Teil des Befehls. Stattdessen $ bezeichnet einen Befehl, der in einem Terminal ausgeführt werden soll.

Hier ist also die erste Regel, die Sie über die Arbeit mit der Kommandozeile wissen müssen: Wenn Sie eine Anweisung eingeben oder kopieren, die das $-Zeichen enthält, wissen Sie, dass Sie es nicht in Ihre Arbeit aufnehmen müssen; das Terminal kümmert sich darum.

## No need to copy the $
$ npm run build

Sie sehen vielleicht etwas anderes am Anfang einer Zeile anstelle von $, wie >, _ oder sogar einen Pfeil. Auch hier ist es fast sicher nicht dazu gedacht, direkt in die Kommandozeile eingegeben oder kopiert zu werden. Ob Dokumentationen oder andere Tutorials das Anfangszeichen einer Zeile anzeigen sollten oder nicht, ist eine ganz andere Diskussion (eine, die Chris ausführlich behandelt hat). So oder so, es hat das Potenzial, verwirrend zu sein, daher möchte ich sicherstellen, dass dies hervorgehoben wird.

Was macht die Kommandozeile?

Filme und Fernsehsendungen stellen ein Terminal oft als etwas dar, das schnell tippende Hacker in einem dunklen, abgeschiedenen Raum benutzen. Das liegt teilweise einfach daran, dass es für Leute, die ein echtes Terminal wahrscheinlich nicht von den kaskadierenden Buchstaben in Matrix unterscheiden könnten, gute Unterhaltung bietet. (Das sollten sie auch nicht; ich könnte nicht sagen, ob eine Operation, die in einer Fernsehsendung dargestellt wird, korrekt ist, und bin vollkommen zufrieden damit, diese Unterscheidung den Profis zu überlassen.)

Aber die Kommandozeile ist nicht gerade zum Schreiben von Code da. Wie der Name „Kommandozeile“ schon sagt, dient sie zum Schreiben von Befehlen. Ich nehme an, man könnte sagen, dass alles Coden bis zu einem gewissen Grad Befehle sind, also ist das zugegebenermaßen eine etwas verschwommene Grenze. Aber im Allgemeinen wird Code in einem Terminal anders geschrieben als in einem Code-Editor. Stattdessen verwenden Sie das Terminal, um Ihrem Computer mit Befehlen, die er ausführen soll, sofort Anweisungen zu geben.

Die Vorteile der Kommandozeile

Sie fragen sich vielleicht, warum Entwickler überhaupt gerne auf der Kommandozeile arbeiten. Sie bevorzugen vielleicht eine nette App oder eine grafische Benutzeroberfläche (GUI, manchmal „Guh-ee“ ausgesprochen), auf der Sie alle Ihre Optionen sehen und visuell die beste auswählen können. Das ist vollkommen in Ordnung, und wir werden in diesem Kapitel ein wenig über GUIs sprechen und Beispiele dafür geben.

Viele Entwickler empfinden das so, auch wenn es nicht so scheint. Aber die Arbeit in der Kommandozeile bringt einige Vorteile mit sich, die sich in einer visuellen App nicht immer leicht reproduzieren lassen.

Sie gewährt Ihnen gottgleiche Systemprivilegien

Die Kommandozeile ist das, was Informatiker als „privilegiertes Umfeld“ bezeichnen. Das klingt vielleicht, als würde es sich auf eine Studentenverbindung beziehen, aber es bedeutet nur, dass es ein Ort ist, an dem es nur sehr wenige Einschränkungen dafür gibt, was Sie tun dürfen; ein Ort ohne Leitplanken.

Hierher rührt der einschüchternde Ruf der Kommandozeile – jeder Befehl, den Sie eingeben, wird, solange er gültig ist, sofort und oft unwiderruflich ausgeführt. Sie kann mit versteckten Dateien interagieren, die Ihr Betriebssystem zu bearbeiten zu verhindern versucht. Sie haben die Macht, auf alles im System zuzugreifen. Sie haben sogar die Macht, mit ähnlichen Kern-Dateien auf einem entfernten Server zu interagieren – und wir alle kennen das Sprichwort, dass mit dieser Art von Macht große Verantwortung einhergeht.

Es mag hilfreich sein, die Kommandozeile wie einen trägen Sicherheitsbeamten zu betrachten. Er geht davon aus, dass Sie immer wissen, was Sie tun, und lässt Sie sofort durch den Eingang. Das macht sie ein wenig riskant, ja, aber es macht sie auch sehr mächtig und zur perfekten Wahl für bestimmte Aufgaben und Projekte.

Sie ist super schnell

Ein weiterer Vorteil der Kommandozeile gegenüber typischen Apps ist: sie ist schnell.

Das ist nicht immer der Fall; die Geschwindigkeit der Kommandozeile wird oft überbewertet und hängt stark von der betreffenden Aufgabe ab. Aber wenn sie schneller ist, kann sie oft um ein Vielfaches schneller sein. Außerdem ist der Bereich, in dem die Kommandozeile wirklich glänzt, genau der Bereich, in dem Code-Projekte am meisten Geschwindigkeit benötigen, nämlich das Herunterladen und Erstellen von Dateien.

Wie wir in anderen Kapiteln dieses Leitfadens sehen werden, besteht ein wichtiger Teil dessen, was npm tut, darin, Dinge auf Ihrem Computer zu installieren (normalerweise in einem Ordner, der für das Projekt, an dem Sie arbeiten, bestimmt ist). Deshalb ist die Kommandozeile großartig für die Arbeit mit einem Paketmanager (wir werden auch erklären, was das bedeutet) wie npm – sie lädt Dateien zwischen Computern herunter und überträgt sie – im Allgemeinen viel, viel schneller als zum Beispiel die Verwendung eines Browsers dafür.

Die Kommandozeile ermöglicht es npm, eine Unmenge von Dateien mit unglaublicher Geschwindigkeit zu generieren. Die Möglichkeit, einen einzigen Befehl auszuführen, der diese Dateien in einem Rutsch mit hoher Geschwindigkeit installiert, aktualisiert oder löscht, macht das Terminal zum schnellsten und effizientesten Werkzeug für viele Aufgaben.

Sie tut, was andere Sprachen nicht können

Ein weiterer Grund, warum die Arbeit im Terminal so vorteilhaft ist, ist, dass viele der Werkzeuge, die Sie in Ihrem Projekt verwenden möchten, dort bereits ohne zusätzliche Einrichtung verfügbar sind.

Aber lassen Sie uns ein wenig zurückgehen.

Wenn Sie den Begriff „serverseitige Sprache“ hören, denken Sie vielleicht an PHP, Ruby oder Java. Vielleicht sind es sogar neuere Einträge in diesem Bereich, wie Rust oder Go. Vielleicht wissen Sie sogar schon, dass Node auf dieser Liste steht, aber wenn nicht, verzeihen Sie mir, dass ich ein wenig vorgreife.

Jedenfalls denken die meisten Leute bei serverseitigen Sprachen wie diesen an einen Webserver, der auf Anfragen wartet und dann darauf antwortet. WordPress beispielsweise bleibt untätig, bis es eine Anfrage erhält, die PHP auslöst. Wenn Sie einen neuen Tweet senden, ist das eine Anfrage an Twitters Server, die schließlich eine Ruby-Methode in Rails aufruft.

Serverseitige Sprachen gelten zu Recht als leistungsfähiger, um es so auszudrücken, als Web-Sprachen. HTML, CSS und JavaScript sind wunderbar, aber sie können nicht mit einem Dateisystem arbeiten, keine E-Mails versenden, keine Bilder verarbeiten, keine Systembefehle ausgeben, nicht mit dem Betriebssystem interagieren oder geplante Aufgaben ausführen; unter vielen, vielen anderen Dingen, die eine App oder eine Website tun muss. Standardmäßig kann JavaScript im Browser nicht einmal ausgeführt werden, es sei denn, jemand schaut sich die Webseite aktiv in seinem Browser an.

Es ist normal, serverseitige Sprachen als die leistungsstarke Engine hinter robusteren Apps und Software zu betrachten. Und in vielen Fällen ist das korrekt. Aber lassen Sie uns einen Moment innehalten und erkennen, dass für die Ausführung von Code Ihr Computer ein Server ist. Kein Webserver, obwohl (er könnte einer sein, aber das wäre seltsam und wahrscheinlich unklug). Aber dennoch ein Server.

A photo of a laptop that is half-closed with a sheet of paper from a yellow legal pad that says This 9s a server (yes, really), do not close the lid!
Sie denken wahrscheinlich nicht an Ihren Computer als Server – und das sollten Sie auch nicht. Aber er kann serverseitige Programmiersprachen ausführen.

Sie können jede der genannten serverseitigen Sprachen installieren und ausführen, und vielleicht haben Sie das sogar schon einmal getan (oder es zumindest versucht). Sie haben vielleicht PHP installiert, um WordPress auszuführen (obwohl es heutzutage viel schönere Möglichkeiten gibt), oder Sie haben Ruby installiert, um einige Tutorials über Rails zu befolgen, nur als Beispiele.

Oder vielleicht auch nicht. Vielleicht haben Sie noch nie eine ganze verdammte Programmiersprache installiert. So oder so, wissen Sie einfach, dass diese Sprachen auf einem Server laufen und nicht in einem Webbrowser – und zu diesem Zweck ist Ihr Computer ein Server.

Darüber hinaus laufen viele der Werkzeuge, die Sie mit Ihrem Entwicklungs-Workflow verwenden möchten – wie z. B. Sass zum Kompilieren von CSS – tatsächlich auf serverseitigen Sprachen. Die Verwendung der Kommandozeile bringt Sie also an den Ort, an dem alle leistungsstärksten Werkzeuge leicht verfügbar sind.

Eine App anstelle der Kommandozeile verwenden

Wir haben GUIs bereits kurz in diesem Artikel angesprochen. Es ist erwähnenswert, dass einige Aufgaben der Kommandozeile entsprechende GUIs haben, die die Arbeit mit der Kommandozeile visueller und programmatischer machen.

Gute Beispiele sind GitHub Desktop (für die Verwaltung von Code-Repositorys) und CodeKit (für die Verarbeitung, Bündelung und Kompilierung von Assets), auch der Source Control Tab in VS Code qualifiziert sich. Auch wenn GUIs wie diese in der Regel auf bestimmte Aufgaben konzentriert sind, ermöglichen sie es Ihnen, Dinge über eine schöne visuelle Benutzeroberfläche in einem tatsächlichen App-Fenster außerhalb des Terminal-Fensters zu erledigen.

Screenshot of the CodeKit app after running ESlint showing how an app can visualize the command line.
CodeKit kann einen Befehl ausführen, um die Code-Formatierung mit Tools wie ESLint zu überprüfen, ohne die Kommandozeile direkt zu verwenden.

Eine GUI ist eine schöne Option, und obwohl ich im Laufe der Jahre sehr gut damit zurechtgekommen bin, auf der Kommandozeile zu arbeiten, wünschte ich mir immer noch, es gäbe mehr GUIs, um die Dinge zu erledigen, die die Kommandozeile ermöglicht – sowohl für meine eigene Bequemlichkeit als auch um die Eintrittsbarriere für neue Entwickler zu senken.

Ich glaube jedoch, dass der Grund, warum es nicht mehr solche Apps gibt, die Geschwindigkeit ist. Es ist viel schneller und einfacher, eine Kommandozeilen-Schnittstelle (CLI) zu erstellen, als eine vollwertige App zusammenzustellen, oft um Größenordnungen. Wenn wir also heute nette Dinge wollen, ist die Kommandozeile oft der Ort, an den wir gehen müssen.

Was kommt als Nächstes

Wir haben uns gerade eine Weile mit der Kommandozeile beschäftigt. Auch wenn die Kommandozeile nicht spezifisch für npm ist, ist sie unerlässlich für die Arbeit mit npm. Sie ist die Schnittstelle, über die wir dem System sagen, was es tun soll, und uns unglaubliche Macht auf System- oder Serverebene verleihen, um Aufgaben in großen Mengen mit rasanten Geschwindigkeiten zu erledigen. Als Paketmanager kümmert sich npm um die Installation, Aktualisierung und Löschung von Dateien (unter anderem) für ein Webprojekt. Die Kommandozeile ist unsere Art, mit npm zu kommunizieren, um all das zu tun.

Als Nächstes werden wir aufschlüsseln, was npm genauer bedeutet, indem wir uns auf den ersten Buchstaben der Abkürzung konzentrieren: „n“ für Node. Was zum Teufel ist das und warum steht es im Namen? Darauf werden wir uns als Nächstes konzentrieren.