Ich möchte von npm richtig abschließen [2020]

Einführung

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.

Zweck

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.

Mit anderen Worten, machen Sie den Abschluss von "npm install" ordnungsgemäß.

Betriebsumgebung

# 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

Was Sie wissen müssen, bevor Sie die Installation von npm erklären

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

Beziehung zwischen npm und 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.

Liste der derzeit häufig verwendeten Befehle

** 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.)

Keine Argumente 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 " getrennt wird.

** 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.

Mit dem Argument 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.

Globale Installation

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 " in jeder Version als unterschiedliche verwaltet. Bitte beachten Sie, dass dies geschehen wird.

【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 |
                ||     ||

Lokale Installation

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)

Lokales Installationsverhalten (ohne die Option -D)

#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 |
                ||     ||

Lokales Installationsverhalten (mit der Option -D)

#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

Ordnungsgemäße Verwendung der globalen Installation und der lokalen Installation

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. ** **.

Fälle, in denen die Option "-D" während der lokalen Installation hinzugefügt werden sollte

** Verwenden Sie im Allgemeinen "npm install -D " für Pakete, die nur in der Entwicklungsumgebung verwendet werden, und "npm install " für andere Pakete. ** **.

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 dependenciesnur 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

Zusammenfassung

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)

schließlich

Wie war das? Jetzt können Sie die folgenden vier "npm install" -Befehle ordnungsgemäß verwenden.


** Ich werde die URLs von Artikeln über npm veröffentlichen, die hier nicht passen ↓ **

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

Ich möchte von npm richtig abschließen [2020]
Ich möchte PHP 7.2 unter Ubuntu 20.04 installieren.
R von Java ausführen Ich möchte rJava ausführen
Ich möchte mit Firestore von Rails spielen
Ich möchte schnell von Java nach SQLite schreiben
[Java] Ich möchte die Differenz zum Datum berechnen
Ich möchte Zeichen konvertieren ...
Ich möchte Geräte in Rails hinzufügen, kann die Installation jedoch nicht bündeln
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
Ich möchte ein schönes build.gradle schreiben
Ich möchte doppelte Fehlermeldungen beseitigen
Ich möchte eine ios.android App machen
Ich möchte DBViewer mit Eclipse 2018-12 verwenden! !!
Ich möchte einen Unit Test schreiben!
Ich möchte mit der Berechtigung des Windows-Verzeichnisses von WSL (Ubuntu) herumspielen.
Ich möchte Java-Updates insgesamt stoppen
Ich möchte @Autowired in Servlet verwenden
Ich möchte statische Felder auf @Autowired ausrichten
Ich möchte die Teamentwicklung aus der Ferne durchführen
Ich möchte nur die Zeit aus Zeittypdaten abrufen ...! [Strftime] * Zusätzliche Hinweise
Ich möchte nach Tabulatortrennzeichen mit Rubin sortieren
[Swift] Ich möchte Gitterlinien (Quadrate) zeichnen.
[Rails] Ich habe versucht, die Version von Rails von 5.0 auf 5.2 zu erhöhen
Ich möchte eine E-Mail in Java senden.
[Ruby] Ich möchte einen Methodensprung machen!
Ich möchte Java8 für jeden mit Index verwenden
Ich möchte den Inhalt der Absicht var_dump
Ich möchte APP_HOME an Logback in Gradle übergeben
Ich möchte eine einfache Wiederholung einer Zeichenkette schreiben
Ich möchte eine Struktur für die Ausnahmebehandlung entwerfen
rsync4j - Ich möchte rsync in Java berühren.
Ich möchte irgendwann sogar in Kotlin sein
Ich möchte nach dem Dezimalpunkt abschneiden
Ich möchte einfache Fehler reduzieren. Sich selbst befehlen.
Ich möchte die Aggregationsverarbeitung mit Spring-Batch durchführen
[Rails] Ich möchte CSS mit Webpacker laden
Ich möchte eine von Git verwaltete Datei löschen
Ich möchte den Wert in Ruby erhalten
Ich möchte ausgeben, welches Zeichen eine beliebige Zeichenfolge von links erscheint
Aktualisierte Node.js mit Nodebrew und schrieb die Routine per Skript, um -g erneut zu installieren
Ich möchte Combine auch in UIKit verwenden.
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Ich möchte eine Methode einer anderen Klasse aufrufen
Ich möchte so etwas wie "cls" in Java machen
Ich möchte NetBeans auf einem Mac verwenden → Ich kann es verwenden!