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.

[Wir empfehlen Ihnen zu lesen] Andere Teile des ZyklusTeil 1:
Allgemeine Informationen und erste SchritteTeil 2:
JavaScript, V8, einige EntwicklungstricksTeil 3:
Hosting, REPL, Arbeit mit der Konsole, ModuleTeil 4:
Dateien npm, package.json und package-lock.jsonTeil 5:
npm und npxTeil 6:
Ereignisschleife, Aufrufstapel, TimerTeil 7:
Asynchrone ProgrammierungTeil 8:
Node.js-Handbuch, Teil 8: HTTP- und WebSocket-ProtokolleTeil 9:
Node.js-Handbuch, Teil 9: Arbeiten mit dem DateisystemTeil 10:
Node.js-Handbuch, Teil 10: Standardmodule, Streams, Datenbanken, NODE_ENVVollständiges PDF des Node.js-Handbuchs 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
Wenn Sie beispielsweise nur das Cowsay-Paket installiert haben, wird Folgendes angezeigt:
> npm list
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ängigkeitenEinige 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
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:
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?
