Ich habe den Befehl "npm install" in Artikeln im Internet nicht verstanden, aber ich wollte diesen Status verlassen, deshalb habe ich diesen Artikel als Memorandum veröffentlicht.
Ich werde hauptsächlich über den Befehl npm install
sprechen, aber ich möchte auch einige grundlegende Dinge über npm ansprechen, wie package.json und node_modules.
Der Zweck dieses Artikels besteht darin, das Verhalten der folgenden vier "npm install" -Befehle zu verstehen und Ihnen dabei zu helfen, diese vier Befehle entsprechend Ihren Anforderungen zu verwenden.
npm install
npm install -g <package>
npm install <package>
npm install -D <package>
Mit anderen Worten, machen Sie den Abschluss von "npm install" ordnungsgemäß.
# Node.Überprüfen Sie die Version von js
$ node -v
v14.13.1
#Überprüfen Sie die Version von npm
$ npm -v
6.14.8
Das Update von npm selbst ist übrigens der folgende Befehl. Beachten Sie die npm-Version des Artikels, auf den Sie verweisen, da sich npm in verschiedenen Hauptversionen sehr unterschiedlich verhält.
#npm Update
$ npm update -g npm
Wenn Sie diesen Bereich nicht verstehen, werden Sie am Ende npm install
richtig ausführen, also werde ich es zuerst erklären.
Wenn Sie es wissen, können Sie es überspringen.
Node.js Node.js ist ein JavaScript, das auf der Serverseite ausgeführt wird.
npm npm (Node Package Manager) ist ein (Manager-) Tool, das Node.js-Pakete verwaltet.
Ein Node.js-Paket ist eine Sammlung nützlicher Funktionen (verschiedene Frameworks und Bibliotheken), die im Voraus erstellt wurden.
yarn
yarn ist ein Paketmanager, der mit npm kompatibel ist und 2016 veröffentlicht wurde.
Ich werde diesmal nicht auf den Garnbefehl eingehen, bin aber mit den folgenden Meinungen sehr zufrieden. Als Referenz.
Übrigens: Es gibt Garn, das von Facebook als ähnliche CLI entwickelt wurde. Es wurde entwickelt, um verschiedene Mängel von npm (wie Geschwindigkeit) auszugleichen und ist sehr beliebt. Das npm-Paket README erwähnt häufig sowohl die Installation mit npm als auch mit Garn und sagt manchmal "Ich empfehle die Verwendung von Garn". Npm wurde jedoch ebenfalls verbessert, und ich glaube nicht, dass es sinnvoll ist, Garn zu installieren und zu verwenden. Insbesondere für Anfänger wird die Verwendung nicht standardmäßiger Tools nicht empfohlen, da dies das verschwenderische Lernen erhöht.
[Für Anfänger] Konzeptionelles Verständnis von NPM und package.json (Auszug) https://qiita.com/righteous/items/e5448cb2e7e11ab7d477
package.json
package.json ist eine Datei, mit der ein eigenes Paket (= Projekt selbst) in der auf Node.js basierenden JavaScript-Anwendungsentwicklung verwaltet wird.
Wenn Sie den Befehl npm init
ausführen, wird package.json erstellt.
package-lock.json Kurz gesagt handelt es sich um eine Datei, die das Ergebnis der Installation eines Pakets mit package.json beschreibt. Ich werde die Erklärung dieses Mal weglassen, aber wenn Sie mehr wissen möchten, verweisen Sie bitte auf den Link [Referenz].
【Referenz】 Was ist package-lock.json?
npm init
Normalerweise können Sie package.json mit dem Befehl touch erstellen, aber im Grunde können Sie package.json erstellen, indem Sie den Befehl npm init
ausführen.
([Entgleisung] Was passiert, wenn ich npm init nicht mache?)
#Leeres leeres Verzeichnis
$ ls
(Keine Standardausgabe)
#Paket von npm init.Create json (Stellen Sie eine Frage, aber sobald alle mit Enter bestanden haben= npm init -y Gleiches Verhalten wie beim Ausführen des Befehls)
$ npm init
# package.json wurde erstellt
$ ls
package.json
Der Anfangswert von package.json lautet wie folgt.
package.json
{
"name": "<current directory name>",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
Es gibt verschiedene Elemente in package.json, aber Daten wie "Name", "Version", "Beschreibung", "Schlüsselwörter", "Autor", "Lizenz" sind nur Metadaten Ihres eigenen Pakets (= Projekt selbst). Ja, wenn Sie kein eigenes Paket veröffentlichen (= Projekt selbst), müssen Sie sich darüber keine Sorgen machen.
Wenn Sie ungefähr 4 von "Abhängigkeiten", "devDependencies", "Skripten" und "Konfiguration" unterdrücken, gibt es meines Erachtens kein Problem, wenn Sie nach Bedarf prüfen und festlegen.
【Referenz】 Struktur von package.json
Veröffentlichte Pakete (wie Bibliotheken und Frameworks) können mit dem Befehl npm
installiert werden.
Wenn Sie ein Paket mit dem Befehl npm
in dem Verzeichnis installieren, in dem sich package.json befindet, wird package.json automatisch aktualisiert.
Außerdem bearbeiten ** Menschen package.json nicht direkt. ** **.
** Aktualisiere alles über den Befehl npm
. (Wichtig) **
node_modules node_modules ist das Verzeichnis, in dem verschiedene auf package.json installierte Pakete installiert werden.
Solange Sie package.json haben, können Sie node_modules generieren, indem Sie den Befehl npm install
ausführen.
Daher ist es normalerweise das in .gitignore
angegebene Verzeichnis.
npm install
Dies ist das Hauptthema dieses Artikels.
Führen Sie den Befehl npm install
aus, um das Paket auf node_modules zu installieren.
Dieser Befehl lautet "npm install", aber da es verschiedene Typen gibt und er kompliziert ist, werde ich ihn ausführlich erläutern.
** Bei Ausführung ohne Argumente **
#Argumentlose Ausführung (Paket.In dem Verzeichnis ausführen, das json enthält)
npm install
** Globale Installation **
#Globale Installation
npm install -g <package>
npm install --global <package>
** Lokale Installation **
#Lokale Installation
# package.Beim Hinzufügen zu json-Abhängigkeiten (in npm v4 und niedriger)--save (= -S)Option erforderlich, in npm v5 und höher nicht erforderlich, da dies die Standardeinstellung ist)
npm install <package>
npm install --save <package> #Keine Notwendigkeit zu verwenden, da dies eine standardmäßig enthaltene Option ist
npm install -S <package> #Keine Notwendigkeit zu verwenden, da dies eine standardmäßig enthaltene Option ist
# package.Beim Hinzufügen zu jsons devDependencies--save-dev (= -D)
npm install --save-dev <package>
npm install -D <package>
** Versionierte Installation **
#Versionsspezifikation
npm install <package>@x.y.z #Bei Angabe der Version
npm install <package>@latest #Bei Angabe der neuesten Version (@Wenn Sie nicht die neueste Version angeben, wird die neueste Version installiert.)
npm install
Es ist einfacher, das Verhalten zu verstehen, wenn der Befehl "npm install" ohne Argumente ausgeführt wird, indem er mit Argumenten von "npm install
** Wenn der Befehl npm install
ohne Argument ausgeführt wird, wird das dort beschriebene Paket in node_modules (Installationsziel) basierend auf den in package.json im aktuellen Verzeichnis beschriebenen Informationen installiert. ** **.
** Der zu verwendende Zeitpunkt ist "wenn package.json gemeinsam genutzt wird und node_modules nicht erstellt werden" oder "wenn package.json aktualisiert wird". ** **.
Bevor Sie den Befehl "npm install" ausführen, müssen Sie die in package.json zu installierenden Paketinformationen im Voraus beschreiben.
Anschließend werden die Paketinformationen in dieser package.json beschrieben, indem der Befehl npm install <Paket>
mit einem Argument ausgeführt wird.
npm install <Paket>
Es kann grob in globale Installation und lokale Installation unterteilt werden. Selbst bei der lokalen Installation kann es je nach Beschreibungsziel von package.json in zwei Teile geteilt werden.
Insgesamt gibt es drei Typen, einen für die globale Installation und zwei für die lokale Installation.
Befehl | Hauptklassifikation | package.Wo schreibe ich json? |
---|---|---|
npm install -g <package> |
Globale Installation | - |
npm install <package> |
Lokale Installation | dependencies |
npm install -D <package> |
Lokale Installation | devDependencies |
Übrigens werden sowohl "globale Installation" als auch "lokale Installation" in der Umgebung Ihres eigenen PCs installiert.
Bei der globalen Installation können Sie die installierten Pakete (Befehle) überall in Ihrer PC-Umgebung ausführen.
Selbst wenn Sie global installieren und mehrere Node.js-Versionen mit "nodebrew" usw. verwalten, werden die Pakete mit "npm install -g
【Referenz】 [Npm] Bestätigung des Ziels der Paketinstallation (npm-Liste)
** Globales Installationsverhalten **
#Der Befehl coway kann nicht ausgeführt werden, da er nicht installiert ist.
$ cowsay "hoge"
zsh: command not found: cowsay
#Globale Installation des Cowsay-Befehls
$ npm install -g cowsay
$ cowsay "hoge"
______
< hoge >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Durch die lokale Installation können Pakete (Befehle) ausgeführt werden, wenn sie sich im selben Verzeichnis wie node_modules befinden.
【Referenz】 So führen Sie ein lokal installiertes Befehlspaket mit npm mit CLI aus (npm-srcipts, npx)
#Installieren Sie das entsprechende Paket (Cowsay)
$ npm install cowsay
+ [email protected]
#Sie können sehen, dass Cowsay zum Element "Abhängigkeiten" hinzugefügt wurde
$ cat package.json
{
(Kürzung)
+ "dependencies": {
+ "cowsay": "^1.4.0"
+ },
(Kürzung)
}
# node_Da es in Modulen installiert ist, kann es ausgeführt werden, während der Pfad durchlaufen wird
$ ./node_modules/.bin/cowsay "hoge"
______
< hoge >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
#Passendes Paket (Typoskript)-Installieren Sie mit Option D.
$ npm install -D typescript
+ [email protected]
#Sie können sehen, dass das Typoskript des devDependencies-Elements hinzugefügt wurde.
$ cat package.json
{
(Kürzung)
"dependencies": {
"cowsay": "^1.4.0"
},
+ "devDependencies": {
+ "typescript": "^4.0.3"
+ },
(Kürzung)
}
# -Selbst mit der Option D wird der Knoten nicht geändert_Da es in Modulen installiert ist, kann es ausgeführt werden, während der Pfad durchlaufen wird
$ ./node_modules/.bin/tsc --version
Version 4.0.3
Sollte ich ein Paket bei der Installation in einer ** globalen Installation ** oder einer ** lokalen Installation ** installieren?
Je nach Situation ** sollten Sie eine globale Installation in den dunklen Wolken vermeiden. ** **.
Global installierte Pakete können nicht in verschiedenen Umgebungen verwendet werden.
Wenn Sie beispielsweise einen neuen PC kaufen, können Sie das Paket nicht verwenden, und Sie können das Paket nicht auf dem PC eines anderen Benutzers verwenden.
Wenn Sie zu diesem Zeitpunkt nur die von der lokalen Installation erstellte package.json freigeben, können Sie dasselbe Paket in jeder Umgebung verwenden, indem Sie einfach "npm install" ausführen.
** Ich denke, es ist sicher, nur das Paket "Ich möchte diesen Befehl jederzeit und überall in einem Verzeichnis verwenden" global zu installieren und die anderen lokal zu installieren. ** **.
** Verwenden Sie im Allgemeinen "npm install -D
Sie können npm install
, das kein Argument für den Paketnamen akzeptiert, auf node_modules installieren, indem Sie die Option --production
hinzufügen, mit Ausnahme der Pakete, die vonnpm install -D <package>
installiert wurden.
Wenn Sie auf diese Weise die Option "--production" hinzufügen, können Sie Pakete ausschließen, die nur in der Entwicklungsumgebung verwendet werden, sodass Sie keine Pakete installieren müssen, auf die während der Produktionsbereitstellung nicht verwiesen wird.
Die Unterschiede zwischen dem Vorhandensein und Fehlen der Option "-D" während der lokalen Installation sind nachstehend zusammengefasst.
Befehl zum Ausführen | package.Wo schreibe ich json? | Wie man jeden benutzt |
---|---|---|
npm install <package> |
dependencies |
Pakete, die auch außerhalb der Entwicklungsumgebung verwendet werden ex) express |
npm install -D <package> |
devDependencies |
Pakete, die nur in der Entwicklungsumgebung verwendet werden ex) eslint |
Darüber hinaus wird der Unterschied zwischen dem Vorhandensein und dem Fehlen der Option "--production" zum Zeitpunkt der Ausführung von "npm install", die nicht das Argument des Paketnamens enthält, wie folgt zusammengefasst.
Befehl zum Ausführen | Installationsziel | Timing für die Ausführung |
---|---|---|
npm install |
・dependencies ・ devDependencies |
Entwicklungsumgebung |
npm install --production |
・dependencies nur |
Wenn Sie keine Pakete installieren möchten, die nur in der Entwicklungsumgebung wie der Produktionsumgebung verwendet werden |
Ich habe viel geschrieben, aber es ist von Fall zu Fall, daher denke ich, dass Sie darüber nachdenken sollten, wenn Sie tatsächlich "npm install --production" ausführen.
【Referenz】 [Package.json] Überlegen Sie, wie Abhängigkeiten und devDependencies richtig verwendet werden
Der Zeitpunkt für die Verwendung jedes Befehls "npm install" ist unten zusammengefasst.
Befehl | Timing zu verwenden |
---|---|
npm install |
Neues oder aktualisiertes Paket.Knoten basierend auf json_Beim Erstellen von Modulen |
npm install -g <package> |
Bei globaler Installation (=Wenn Sie den Befehl in einem beliebigen Verzeichnis verwenden möchten) |
npm install <package> |
package.Ich möchte lokal auf json installieren (=Beim Hinzufügen eines Pakets (das Sie nur in diesem Verzeichnis verwenden möchten) (ein Paket, das auch in der Produktionsumgebung verwendet wird) |
npm install -D <package> |
package.Ich möchte lokal auf json installieren (=Beim Hinzufügen eines Pakets (das Sie nur in diesem Verzeichnis verwenden möchten) (ein Paket, das nur in der Entwicklungsumgebung verwendet wird) |
Wie war das? Jetzt können Sie die folgenden vier "npm install" -Befehle ordnungsgemäß verwenden.
npm install
npm install -g <package>
npm install <package>
npm install -D <package>
Hinweise zur Versionsverwaltung von Node.j (nodebrew, nodenv) https://qiita.com/sugurutakahashi12345/items/20803f553b5716c13902
[Npm] Bestätigung des Paketinstallationsziels (npm-Liste) https://qiita.com/sugurutakahashi12345/items/8820b09db0dc1507f563
Ein Hinweis zur semantischen Versionierung https://qiita.com/sugurutakahashi12345/items/68e9dfb11e84d20acc6d
Über tilda ^ und carrt ~ beschrieben in package.json https://qiita.com/sugurutakahashi12345/items/0876ce674587515c66ba
Was ist package-lock.json? https://qiita.com/sugurutakahashi12345/items/1f6bb7a372b8263500e5
Was ist, wenn ich nicht npm init? https://qiita.com/sugurutakahashi12345/items/1049a33b86225f6345fe
So führen Sie einen Befehl mit CLI für ein lokal mit npm installiertes Paket aus (npm-srcipts, npx) https://qiita.com/sugurutakahashi12345/items/b814a09b65d8852226ad
Wenn der Paketname und der Befehl in npx unterschiedlich sind (npx -p <Paket> -c" <Befehl> "
)
https://qiita.com/sugurutakahashi12345/items/329e0cdbaf337edb81d3
npm-scripts vor, nach Präfix https://qiita.com/sugurutakahashi12345/items/91a133abacfc38b3d7a7
Sequentielle / parallele Ausführung von npm-Skripten (npm-run-all) https://qiita.com/sugurutakahashi12345/items/2a17a3cdfbc4a7e5e4eb
So aktualisieren Sie das in package.json beschriebene Paket [npm-check-updates, veraltet] https://qiita.com/sugurutakahashi12345/items/df736ddaf65c244e1b4f
Verwendung der Konfiguration von package.json https://qiita.com/sugurutakahashi12345/items/357fc6c2ae04f48b2076
Recommended Posts