Was ist der Unterschied zwischen npm install und npm run build?

113

Was ist der Unterschied zwischen npm installund npm run build?

Ich habe in meinem Projekt festgestellt, dass npm manchmal fehlschlägt, wenn npm installes ausgeführt wird, aber beim Ausführen npm run buildfunktioniert es einwandfrei.

Wie unterscheidet sich das Innenleben dieser beiden Ziele nämlich installund run build?

BalajiK
quelle
1
Die akzeptierte Antwort ist ab sofort umstritten. Ich denke, die Antworten von MKP und CTS_AE sind zu diesem Zeitpunkt relevanter. Bei gebührendem Respekt sollte dies unter der Benachrichtigung des Moderators und / oder desjenigen erfolgen, der diese Frage gestellt hat.
Suhas Chikkanna

Antworten:

69

npm installInstalliert Abhängigkeiten in das node_modules/Verzeichnis für das Knotenprojekt, an dem Sie arbeiten. Sie können installein anderes node.js-Projekt (Modul) aufrufen , um es als Abhängigkeit für Ihr Projekt zu installieren.

npm run buildist ein Alias ​​für npm buildund tut nichts, es sei denn, Sie geben an, was "build" in Ihrer package.json-Datei tut. Sie können alle erforderlichen Bau- / Vorbereitungsaufgaben für Ihr Projekt ausführen, bevor es in einem anderen Projekt verwendet wird.

buildwird von linkund installBefehle gemäß der Dokumentation für Build aufgerufen :

Dies ist der Installationsbefehl, der von npm link und npm install aufgerufen wird.

Churro
quelle
37
Downvoted seit @MKP sagt npm run buildund npm buildsind nicht gleich. Ich werde erneut abstimmen, wenn Sie beweisen können, dass sie tatsächlich gleich sind, oder Ihre Antwort korrigieren.
Hendy Irawan
Richtige Antwort ist der Link unten, ich glaube auch , dass nach Bezug npm buildund npm run buildsind nicht das gleiche. IMHO, vielleicht muss die obige Antwort von @churro korrigiert werden. Bitte korrigieren Sie mich, wenn ich falsch liege. stackoverflow.com/questions/29939697/…
Suhas Chikkanna
1
Leider hat @HendyIrawan recht und sie sind nicht der gleiche Befehl. Dies ist eine hoch gewählte Antwort, die einige Leute verwirren könnte. Ich glaube, es muss aktualisiert werden.
Rdarioduarte
79

NPM im Jahr 2019

npm buildexistiert nicht mehr. Sie müssen npm run buildjetzt anrufen . Weitere Infos unten.

TLDR;

npm install: installiert Abhängigkeiten und ruft dann das installaus dem package.json scriptsFeld auf.

npm run build: Führt das Build-Feld vom package.json scriptsFeld aus.


NPM-Skriptfeld

https://docs.npmjs.com/misc/scripts

Es gibt viele Dinge, die Sie in das package.jsonFeld npm- Skripte einfügen können. Schauen Sie sich den obigen Dokumentationslink über dem Lebenszyklus der Skripte an - die meisten haben Pre- und Post-Hooks, mit denen Sie Skripte vor / nach der Installation, Veröffentlichung, Deinstallation, Test, Start, Stopp, Shrinkwrap und Version ausführen können.


Dinge komplizieren

  • npm install ist nicht dasselbe wie npm run install
  • npm installInstalliert package.jsonAbhängigkeiten und führt dann die auspackage.json scripts.install
    • (Aufrufe im Wesentlichen npm run installnach der Installation von Abhängigkeiten.
  • npm run installLäuft nur das package.json scripts.install, es werden keine Abhängigkeiten installiert .
  • npm buildwar früher ein gültiger Befehl (war derselbe wie npm run build), ist es aber nicht mehr; Es ist jetzt ein interner Befehl. Wenn Sie es ausführen, erhalten Sie: npm WARN build npm build called with no arguments. Did you mean to npm run-script build?Weitere Informationen finden Sie in der Dokumentation: https://docs.npmjs.com/cli/build
CTS_AE
quelle
5
+1 Aber es ist verwirrend zu sagen, dass npm buildes nicht mehr existiert. Es wird immer noch in dem Sinne beendet, dass es für npm bekannt / speziell ist, da es mit der Warnung reagiert, die Sie unten erwähnen. Im Wesentlichen macht es jetzt nichts. Diese Antwort auf eine andere Frage gab die kürzeste Zusammenfassung auf npm buildvs npm run build.
bluenote10
1
Mit anderen Worten, Zeit, Garn zu überprüfen?
Elch auf dem losen
44

Der Hauptunterschied ist ::

npm installieren ist ein npm cli-Befehl, der die vordefinierte Funktion ausführt, dh wie von Churro geschrieben, um die in package.json angegebenen Abhängigkeiten zu installieren

npm run Befehlsname oder npm run-Skript - Befehl-Name ( ex. npm Lauf build ) ist auch ein cli-Befehl vorgegeben Ihre benutzerdefinierte Skripts mit dem Namen anstelle von "Befehlsnamen" angegeben auszuführen. In diesem Fall ist npm run build also ein benutzerdefinierter Skriptbefehl mit dem Namen "build" und führt alle darin angegebenen Schritte aus (z. B. "Hallo Welt" im folgenden Beispiel package.json).

Ponits zu beachten ::

1) Eine weitere Sache, npm buildund es npm run buildgibt zwei verschiedene Dinge npm build, die von Churro geschrieben werden, aber npm run buildbenutzerdefinierte Arbeiten ausführen, die im Inneren geschrieben sindpackage.json

2) Und npm buildund npm run buildsind nicht gleich. Ich meine, Sie können im benutzerdefinierten build ( npm run build) -Skript nichts angeben und erwarten npm build, dass Sie dasselbe tun. Versuchen Sie Folgendes zu überprüfen package.json:

{
  "name": "demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build":"echo 'hello build'"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {},
  "dependencies": {}
}

und laufen npm run buildund npm buildeins nach dem anderen und Sie werden den Unterschied sehen. Weitere Informationen zu Befehlen finden Sie in der npm-Dokumentation .

Prost!!

MKP
quelle
11
Anstatt zu versuchen, dies auszuführen, würde ich mich freuen, wenn Sie genauer erklären, was der Unterschied zwischen npm run buildund ist npm build. Ok, auf welche Weise sind sie nicht gleich? Also ist @ Churros Antwort dann falsch?
Hendy Irawan
7
Ja, was npm buildbleibt, bleibt ein Rätsel. Wäre schön das zu wissen. Soweit ich das beurteilen kann, ist " npm buildwird tun, was von Churro geschrieben wurde" nicht wahr. Churro sagte, es würde das tun, was package.jsonfür den buildBefehl angegeben ist (wie in dem scriptsAbschnitt definiert, nehme ich an). Aber genau das npm run buildführt npm buildden in package.json scriptsAbschnitt angegebenen Build-Befehl aus und führt ihn nicht aus . Es sei denn, es gibt eine andere Möglichkeit zu definieren, was npm buildin der package.json, die hier nicht erklärt wird, noch von Churro (oder in den NPM-Dokumenten, denke ich, leider) zu tun ist.
Trollkotze
2
Also habe ich es versucht und npm buildgesagt, dass npm WARN build npm buildohne Argumente aufgerufen wird. Wolltest du das npm run-script build? . Ich denke, es hat nichts getan. Nachdem ich Zeit damit verbracht habe, alle Antworten hier zu lesen und es selbst zu versuchen, kann ich immer noch nicht sagen, was der Zweck von npm build:(.
bluenote10
4
  • npm install Installiert die Abhängigkeiten in Ihrer package.json-Konfiguration.
  • npm run build führt das Skript "build" aus und erstellt ein Skript, mit dem Ihre Anwendung ausgeführt wird - sagen wir server.js
  • npm start führt das Skript "start" aus, das dann "node server.js" lautet.

Es ist schwierig, genau zu sagen, was das Problem war, aber wenn Sie sich Ihre Skriptkonfiguration ansehen, würde ich vermuten, dass "build" eine Art Build-Tool verwendet, um Ihre Anwendung zu erstellen, während "start" davon ausgeht, dass der Build abgeschlossen wurde, aber dann fehlschlägt, wenn Die Datei ist nicht da.

Sie verwenden wahrscheinlich Bower oder Grunt - ich erinnere mich an eine typische Grunt-Anwendung, die diese Skripte sowie ein "sauberes" Skript zum Löschen des letzten Builds definiert hat.

Build-Tools erstellen in der Regel eine Datei in einem bin /, dist / oder build / -Ordner, die das Startskript dann aufruft - z. B. "node build / server.js". Wenn Sie npm startausfallen, liegt es wahrscheinlich daran, dass Sie angerufen habennpm clean den neuesten Build oder ähnlich gelöscht haben, sodass Ihre Anwendungsdatei nicht vorhanden ist und der Start von npm fehlschlägt.

Der Quellcode von npm build - um auf die Diskussion in dieser Frage einzugehen - ist in Github, damit Sie ihn sich ansehen können, wenn Sie möchten. Wenn Sie npm builddirekt ausführen und ein "Build" -Skript definiert haben, wird es mit einem Fehler beendet, der Sie auffordert, Ihr Build-Skript als aufzurufennpm run-script build so dass es nicht dasselbe ist wie npm run script.

Ich bin mir nicht ganz sicher, was das npm buildbedeutet, aber es scheint mit Nachinstallations- und Paketskripten in Abhängigkeiten zu tun zu haben. Ich gehe davon aus, dass dies möglicherweise sicherstellt, dass alle CLI-Erstellungsskripte oder nativen Bibliotheken, die für Abhängigkeiten erforderlich sind, nach dem Herunterladen des Pakets für die jeweilige Umgebung erstellt werden. Aus diesem Grund rufen Link und Installation dieses Skript auf.

Chanoch
quelle