Node.js Handbuch, Teil 5: npm und npx

Heute, im fünften Teil der Übersetzung des Node.js-Handbuchs, werden wir die Analyse der npm-Funktionen abschließen. Insbesondere werden wir Themen wie das Herausfinden installierter Versionen von npm-Paketen, das Installieren alter Versionen von Paketen, das Aktualisieren von Abhängigkeiten sowie die lokale und globale Deinstallation von Paketen ansprechen. Hier sprechen wir über npx.




Finden von Versionen installierter npm-Pakete


Führen Sie den folgenden Befehl aus, um die Versionen aller im Projektordner installierten npm-Pakete einschließlich ihrer Abhängigkeiten zu ermitteln:

npm list 

Dies kann beispielsweise Folgendes zur Folge haben:

 > npm list /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 ├── get-stdin@5.0.1 ├─┬ optimist@0.6.1 │ ├── minimist@0.0.10 │ └── wordwrap@0.0.3 ├─┬ string-width@2.1.1 │ ├── is-fullwidth-code-point@2.0.0 │ └─┬ strip-ansi@4.0.0 │  └── ansi-regex@3.0.0 └── strip-eof@1.0.0 

Sie können das Gleiche herausfinden, indem package-lock.json Projekts package-lock.json Die Baumstruktur, die mit dem obigen Befehl angezeigt wird, ist jedoch bequemer anzuzeigen.

Um eine ähnliche Liste der global installierten Pakete zu erhalten, können Sie den folgenden Befehl verwenden:

 npm list -g 

Sie können nur Informationen zu lokalen Top-Level-Paketen ( package.json solchen, die Sie selbst installiert haben und die in package.json aufgeführt package.json ) wie folgt package.json :

 npm list --depth=0 

Wenn Sie beispielsweise nur das Cowsay-Paket installiert haben, wird Folgendes angezeigt:

 > npm list --depth=0 /Users/flavio/dev/node/cowsay └── cowsay@1.3.1 

Verwenden Sie den folgenden Befehl, um die Version eines bestimmten Pakets herauszufinden:

 npm list cowsay 

Als Ergebnis seiner Implementierung erhalten wir ungefähr Folgendes:

 > npm list cowsay /Users/flavio/dev/node/cowsay └── cowsay@1.3.1 

Dieser Befehl eignet sich auch zum Ermitteln der Abhängigkeitsversionen der von Ihnen installierten Pakete. In diesem Fall fungiert der Name des Abhängigkeitspakets als Name des an ihn übergebenen Pakets, und die Ausgabe des Befehls sieht folgendermaßen aus:

 > npm list minimist /Users/flavio/dev/node/cowsay └─┬ cowsay@1.3.1 └─┬ optimist@0.6.1   └── minimist@0.0.10 

Ein Eintrag zum Abhängigkeitspaket in dieser Struktur wird hervorgehoben.

Wenn Sie wissen möchten, wie viele der neuesten Versionen eines Pakets im npm-Repository verfügbar sind, benötigen Sie einen Befehl in der folgenden Form:

 npm view [package_name] version 

Als Antwort gibt sie die Versionsnummer des Pakets heraus:

 > npm view cowsay version 1.3.1 

Alte Versionen von npm-Paketen installieren


Die Installation einer alten Version des npm-Pakets kann erforderlich sein, um Kompatibilitätsprobleme zu lösen. Sie können die erforderliche Version des Pakets von npm mit der folgenden Konstruktion installieren:

 npm install <package>@<version> 

Im Fall des Cowsay-Pakets, das wir als Beispiel verwenden, install cowsay npm install cowsay seine neueste Version (1.3.1 zum Zeitpunkt dieses Schreibens). Wenn Sie die Version 1.2.0 installieren müssen, verwenden Sie diesen Befehl:

 npm install cowsay@1.2.0 

Sie können Versionen angeben, indem Sie globale Pakete installieren:

 npm install -g webpack@4.16.4 

Wenn Sie herausfinden möchten, welche Versionen eines Pakets in npm verfügbar sind, können Sie dies mithilfe dieser Konstruktion tun:

 npm view <package> versions 

Hier ist ein Beispiel für das Ergebnis ihrer Arbeit:

 > npm view cowsay versions [ '1.0.0', '1.0.1', '1.0.2', '1.0.3', '1.1.0', '1.1.1', '1.1.2', '1.1.3', '1.1.4', '1.1.5', '1.1.6', '1.1.7', '1.1.8', '1.1.9', '1.2.0', '1.2.1', '1.3.0', '1.3.1' ] 

Aktualisieren der Projektabhängigkeiten auf die neuesten Versionen


Wenn Sie ein Paket mit einem Befehl vom Typ npm install <packagename> , wird die neueste Version aus dem Repository heruntergeladen und im Ordner node_modules . In diesem Fall werden die entsprechenden Einträge zu den package-lock.json package.json und package-lock.json im Projektordner hinzugefügt.

Durch die Installation eines Pakets findet und installiert npm außerdem seine Abhängigkeiten.

Angenommen, wir installieren das bekannte Cowboysay-Paket, indem wir den npm install cowsay . Das Paket wird im Ordner node_modules des Projekts installiert, und der folgende Eintrag befindet sich in der Datei package.json :

 { "dependencies": {   "cowsay": "^1.3.1" } } 

package-lock.json auch Informationen zu diesem Paket. Hier ist ein Fragment davon:

 { "requires": true, "lockfileVersion": 1, "dependencies": {   "cowsay": {     "version": "1.3.1",     "resolved": "https://registry.npmjs.org/cowsay/-/cowsay-1.3.1.tgz",     "integrity": "sha512-3PVFe6FePVtPj1HTeLin9v8WyLl+VmM1l1H/5P+BTTDkMAjufp+0F9eLjzRnOHzVAYeIYFF5po5NjRrgefnRMQ==",     "requires": {       "get-stdin": "^5.0.1",       "optimist": "~0.6.1",       "string-width": "~2.1.1",       "strip-eof": "^1.0.0"     }   } } } 

Aus diesen beiden Dateien können Sie ersehen, dass wir coway Version 1.3.1 installiert haben und dass die Paketaktualisierungsregel als ^1.3.1 . Im vierten Teil dieser Materialreihe haben wir bereits über die Regeln der semantischen Versionierung gesprochen. Denken Sie daran, dass dieser Eintrag bedeutet, dass npm das Paket aktualisieren kann, wenn seine Neben- und Patch-Versionen veröffentlicht werden.

Wenn beispielsweise eine neue Nebenversion eines Pakets herauskommt und wir den Befehl npm update ausführen, wird die installierte Version des Pakets aktualisiert und die Informationen zum installierten Paket werden in der Datei package-lock.json aktualisiert, und die Datei package.json bleibt unverändert.

Um herauszufinden, ob neue Versionen der im Projekt verwendeten Pakete veröffentlicht wurden, können Sie den folgenden Befehl verwenden:

 npm outdated 

Hier sind die Ergebnisse dieses Befehls für ein Projekt, dessen Abhängigkeiten seit langem nicht mehr aktualisiert wurden:


Analyse veralteter Projektabhängigkeiten

Einige der verfügbaren Paketaktualisierungen sind die Hauptversionen, deren Aktualisierungen nicht ausgeführt werden, wenn der Befehl npm update ausgeführt wird. Ein Upgrade auf Hauptversionen durch dieses Team wird nicht durchgeführt, da diese (per Definition) wichtige Änderungen enthalten können, die sich nicht durch Abwärtskompatibilität mit früheren Hauptversionen auszeichnen, und npm versucht, den Entwickler vor Problemen zu bewahren, die die Verwendung solcher Pakete verursachen können.

Installieren Sie das Paket npm-check-updates global, um ein Upgrade auf neue Hauptversionen aller verwendeten Pakete durchzuführen:

 npm install -g npm-check-updates 

Führen Sie dann das von ihm bereitgestellte Dienstprogramm aus:

 ncu -u 

Dieser Befehl aktualisiert die Datei package.json und nimmt Änderungen an den Anweisungen für geeignete Paketversionen in den devDependencies dependencies und devDependencies . Dadurch kann npm die im Projekt verwendeten Pakete nach dem Ausführen des Befehls npm update auf neue Hauptversionen npm update .

Wenn Sie die neuesten Paketversionen für ein gerade heruntergeladenes Projekt installieren möchten, für das noch kein Ordner node_modules , führen Sie anstelle von npm update den Befehl npm install .

Lokale oder globale Deinstallation von Paketen


Führen Sie einen Befehl aus, der wie folgt aussieht, um ein zuvor lokal install <package-name> zu deinstallieren (mit dem Befehl install <package-name> ):

 npm uninstall <package-name> 

Wenn das Paket global installiert ist, müssen Sie das Flag -g (--global ) verwenden, um es zu entfernen. Ein ähnlicher Befehl könnte beispielsweise folgendermaßen aussehen:

 npm uninstall -g webpack 

Bei der Ausführung eines solchen Befehls spielt der aktuelle Ordner keine Rolle.

Informationen zur Auswahl zwischen globaler und lokaler Installation von Paketen


Wann und warum werden Pakete am besten global installiert? Um diese Frage zu beantworten, erinnern wir uns daran, wie sich die lokale und globale Installation von Paketen unterscheiden:

  • Lokale Pakete werden in dem Verzeichnis installiert, in dem sie einen Befehl der Form npm install <package-name> ausführen. Solche Pakete befinden sich im Ordner node_modules in diesem Verzeichnis.
  • Globale Pakete werden in einem speziellen Ordner installiert (der von den spezifischen Einstellungen Ihres Systems abhängt), unabhängig davon, wo sie einen Befehl der Form npm install -g <package-name> ausführen.

Das Verbinden lokaler und globaler Pakete im Code ist dasselbe:

 require('package-name') 

Was ist der beste Weg, um Pakete zu installieren?

Im Allgemeinen sollten alle Pakete lokal installiert werden. Selbst wenn Sie Dutzende von Node.js-Projekten haben, können Sie daher bei Bedarf sicherstellen, dass verschiedene Versionen derselben Pakete verwendet werden.

Das Aktualisieren des globalen Pakets führt dazu, dass alle Projekte, in denen es angewendet wird, die neue Version verwenden. Es ist leicht zu verstehen, dass dies in Bezug auf die Projektunterstützung zu einem echten Albtraum führen kann, da neue Versionen einiger Pakete möglicherweise nicht mit ihren alten Versionen kompatibel sind.

Wenn jedes Projekt eine eigene lokale Version eines Pakets hat, obwohl dies wie eine Verschwendung von Ressourcen erscheint, ist dies eine sehr geringe Gebühr, um die negativen Folgen zu vermeiden, die durch die Inkompatibilität neuer Versionen von Paketen verursacht werden können, die zentral mit dem Projektcode aktualisiert werden.

Pakete sollten global installiert werden, wenn es sich um Dienstprogramme handelt, die über die Befehlszeile aufgerufen werden und in vielen Projekten verwendet werden.

Solche Pakete können auch lokal installiert werden, indem die von ihnen bereitgestellten Befehlszeilenprogramme mit npx ausgeführt werden. Einige Pakete sind jedoch global besser installiert. Zu den Paketen, mit denen Sie möglicherweise vertraut sind, gehören beispielsweise die folgenden:

  • npm
  • create-react-app
  • vue-cli
  • grunzen-cli
  • Mokka
  • React-Native-Cli
  • gatsby-cli
  • für immer
  • nodemon

Möglicherweise sind auf Ihrem System bereits Pakete global installiert. Verwenden Sie den folgenden Befehl, um dies herauszufinden:

 npm list -g --depth 0 

Informationen zu Projektabhängigkeiten


Wann sollte ein Paket als reguläre Projektabhängigkeit betrachtet werden, die zur Sicherstellung seiner Funktionsweise erforderlich ist, und wann - als Entwicklungsabhängigkeit?

Wenn Sie ein Paket mit einem Befehl wie npm install <package-name> installieren npm install <package-name> es als reguläre Abhängigkeit installiert. Ein Datensatz eines solchen Pakets wird im Abschnitt " dependencies " der Datei package.json erstellt (vor npm 5 wurde ein solcher Datensatz nur mit dem Flag --save , jetzt muss er nicht mehr verwendet werden).

Mit dem --save-dev können Sie das Paket als Entwicklungsabhängigkeit installieren. Gleichzeitig wird eine Aufzeichnung im Abschnitt devDependencies Datei devDependencies erstellt.

Entwicklungsabhängigkeiten sind Pakete, die bei der Entwicklung eines Projekts benötigt werden. Während der normalen Funktionsweise sind sie nicht erforderlich. Solche Pakete umfassen beispielsweise Testtools, Webpack, Babel.

Wenn ein Projekt mit dem Befehl npm install in seinem Ordner bereitgestellt wird, in dem sich ein Ordner befindet, der package.json Datei package.json enthält, werden alle Abhängigkeiten installiert, da npm davon ausgeht, dass eine solche Installation zum Zweck der Bearbeitung des Projekts durchgeführt wird.

Wenn das Paket in der Produktion bereitgestellt werden muss, müssen Sie daher bei der install --production npm install --production . Dank des --production werden keine --production installiert.

Npx-Dienstprogramm


Jetzt werden wir über ein sehr mächtiges Team sprechen, npx , das in npm 5.2 erschien. Eine seiner Funktionen besteht darin, ausführbare Dateien auszuführen, die in npm-Paketen enthalten sind. Wir haben bereits überlegt, npx zu verwenden, um eine ähnliche Datei aus dem Cowboysay-Paket auszuführen. Lassen Sie uns nun genauer darüber sprechen.

▍Verwenden Sie npx, um das Ausführen lokaler Befehle zu vereinfachen


Die Entwickler von Node.j veröffentlichten viele ausführbare Dateien (Dienstprogramme) in Form von Paketen, die global installiert werden sollten, und ermöglichten einen bequemen Zugriff auf ihre Funktionen, da Sie sie über die Befehlszeile ausführen konnten, indem Sie einfach den Namen des entsprechenden Befehls eingeben. Das Arbeiten in einer solchen Umgebung war jedoch sehr unangenehm, wenn verschiedene Versionen derselben Pakete installiert werden mussten.

Mit einem Befehl der Form npx commandname sucht der npx commandname automatisch nach der gewünschten Datei im Projektordner node_modules . Dadurch entfällt die Notwendigkeit, den genauen Pfad zu einer solchen Datei zu kennen. Dies macht auch die globale Installation des Pakets unnötig und ermöglicht den Zugriff von überall im Dateisystem über die Verwendung der Systemvariablen PATH .

▍Dienstprogramme ausführen, ohne sie installieren zu müssen


Npx hat eine weitere interessante Funktion, mit der Dienstprogramme gestartet werden können, ohne sie zuerst zu installieren. Dies ist hauptsächlich aus folgenden Gründen nützlich:

  • Keine Installation von Dienstprogrammen erforderlich.
  • Sie können verschiedene Versionen derselben Dienstprogramme @version indem Sie die gewünschte Version mit dem Konstrukt @version .

Schauen wir uns an, wie Sie diesen Mechanismus verwenden, indem Sie das bereits bekannte cowsay Dienstprogramm verwenden. Wenn das Cowsay-Paket global installiert ist, gibt die Ausführung des cowsay "Hello" in der Befehlszeile eine "sprechende" Kuh an die Konsole aus:

 _______ < Hello > -------       \ ^__^        \ (oo)\_______           (__)\ )\/\               ||----w |               || || 

Wenn das Cowsay-Paket nicht global installiert ist, gibt ein ähnlicher Befehl einen Fehler aus.

Mit dem Dienstprogramm npx können Sie solche Befehle ausführen, ohne sie zu installieren. Im Rahmen unseres Beispiels sieht es so aus:

 npx cowsay "Hello" 

Ein solcher Befehl wird funktionieren, aber obwohl eine "sprechende" Kuh im Großen und Ganzen nicht viel Nutzen bringt, kann der gleiche Ansatz verwendet werden, um viel nützlichere Befehle auszuführen. Hier einige Beispiele:

  • Es gibt ein Befehlszeilentool zum Erstellen und Ausführen von Vue-Anwendungen. Mit npx kann es folgendermaßen aufgerufen werden: npx vue create my-vue-app .
  • Sie können das Dienstprogramm create-react-app , create-react-app React-Anwendungen zu create-react-app . Ihr Anruf über npx sieht folgendermaßen aus: npx create-react-app my-react-app .

Nach dem Herunterladen und Verwenden des entsprechenden npx-Codes wird dieser gelöscht.

▍ Starten von JavaScript-Code mit verschiedenen Versionen von Node.js.


Um Code mit verschiedenen Versionen von Node.js auszuführen, können Sie mit npx auf den npm-Paketknoten zugreifen und dessen Version angeben. Es sieht so aus:

 npx node@6 -v #v6.14.3 npx node@8 -v #v8.11.3 

Dadurch sind keine Tools wie nvm oder andere Versionsmanager von Node.js erforderlich.

▍Starten Sie beliebige Codefragmente, die an einer bestimmten Adresse verfügbar sind


Mit Npx können Sie nicht nur in npm veröffentlichten Code ausführen. Insbesondere wenn Sie einen Link zu einem bestimmten Code haben (z. B. einen auf GitHub veröffentlichten Kern), können Sie ihn folgendermaßen ausführen:

 npx https://gist.github.com/zkat/4bc19503fe9e9309e2bfaa2c58074d32 

Natürlich sollten Sie bei der Ausführung eines solchen Codes die Sicherheit nicht vergessen. Npx bietet dem Entwickler große Chancen, aber sie bedeuten auch große Verantwortung.

▍ Ergebnisse


Heute haben wir über einige nützliche npm-Mechanismen und die Verwendung von npx gesprochen. Zu diesem Zeitpunkt sollten Sie ein grundlegendes Verständnis des npm-Geräts und der Arbeit mit diesem Paketmanager haben. Wenn Sie sich npm genauer ansehen möchten, lesen Sie die Dokumentationsseite des Projekts und experimentieren Sie weiter.

Das nächste Mal werden wir einige grundlegende Node.js-Mechanismen diskutieren, deren Verständnis für eine erfolgreiche Anwendungsentwicklung für diese Plattform erforderlich ist.

Liebe Leser! Verwenden Sie npx?

Source: https://habr.com/ru/post/de423705/


All Articles