Ich habe dies in meiner package.json-Datei (verkürzte Version):
{
"name": "a-module",
"version": "0.0.1",
"dependencies": {
"coffee-script": ">= 1.1.3"
},
"devDependencies": {
"stylus": ">= 0.17.0"
}
}
Ich verwende NPM Version 1.1.1 auf Mac 10.6.8.
Wenn ich den folgenden Befehl im Projektstamm ausführe, werden sowohl der dependencies
als auch installiert devDependencies
:
npm install
Ich hatte den Eindruck, dass dieser Befehl Folgendes installierte devDependencies
:
npm install --dev
Wie mache ich es so, dass npm install
nur installiert wird dependencies
(so dass die Produktionsumgebung nur diese Module erhält), während so etwas npm install --dev
sowohl beide dependencies
als auch installiert devDependencies
?
dependencies
unddevDependencies
und wann jeder von ihnen verwendet wird.Antworten:
Der
npm install
Befehl installiert dasdevDependencies
zusammen mit anderen,dependencies
wenn es in einem Paketverzeichnis in einer Entwicklungsumgebung ausgeführt wird (Standardeinstellung).Verwenden Sie
npm install --only=prod
(oder--only=production
) zu installieren , nurdependencies
, und nichtdevDependencies,
unabhängig von dem Wert derNODE_ENV
Umgebungsvariablen.Quelle: npm docs
Hinweis: Vor Version 3.3.0 von npm (13.08.2015) wurde die Option aufgerufen
--production
, dnpm install --production
. H.quelle
npm install yourpackage.tgz
, nicht auch die devDependencies erhalten. Dies ist jedoch bereits der Fall. Siehe die Antwort von Kevin Cox unten ( stackoverflow.com/a/15826602/825588 ).NODE_ENV=production
etwas anderes, was ich tat, und konnte für mein Leben nicht herausfinden, warum ichnpm install
keine Abhängigkeiten installieren sollte. Danke für die gründliche Antwort.npm install --dev
würde nur dev Abhängigkeiten installieren--dev
Option ist veraltet. Verwenden Sie--only=dev
stattdessen.Ich stoße auch auf dieses Problem! Die Installation von npm ist etwas verwirrend und Webposts bringen immer wieder die Flags -d / - dev ein, als ob es einen expliziten Installationsmodus für die Entwicklung gäbe.
npm install
installiert sowohl " Abhängigkeiten " als auch " devDependencies "npm install --production
installiert nur " Abhängigkeiten "npm install --dev
installiert nur " devDependencies "quelle
NODE_ENV
istproduction
und Sie sie ausführennpm install
, werden keine Entwicklungsabhängigkeiten installiert. Ich bin in meiner Docker-Datei auf dieses Problem gestoßen.npm --production=false install
(obwohl ich nicht sicher bin, ob dies neben der --dev-Flagge funktioniert)Die neue Option lautet:
Wenn Sie nur devDependencies installieren möchten:
quelle
--only=prod
. Sie, Sir, haben teilweise recht. ; PWenn Sie diesen POST im Jahr 2016 lesen, erreichen Sie bitte mit
Das Argument führt dazu, dass unabhängig vom NODE_ENV entweder nur devDependencies oder nur Nicht-devDependencies installiert werden.
von: https://docs.npmjs.com/cli/install
quelle
--production
als auch--only={prod[uction]|dev[elopment]}
.Wenn Sie bereits alle Ihre Abhängigkeiten installiert haben und vermeiden möchten, dass Sie Ihre Produktionspakete erneut von NPM herunterladen müssen, können Sie einfach Folgendes eingeben:
Dadurch werden Ihre Entwicklungsabhängigkeiten aus Ihrem
node_modules
Ordner entfernt. Dies ist hilfreich, wenn Sie versuchen, einen zweistufigen Prozess wie zu automatisierenWenn Sie
npm prune
zwischendurch laufen, müssen Sie nicht alles neu installieren!quelle
Bei Verwendung von "npm install" werden die Module geladen und sind in Ihrer gesamten Anwendung verfügbar, unabhängig davon, ob es sich um "devDependencies" oder "dependencies" handelt. Summe dieser Idee: Alles, was Ihre package.json als Abhängigkeit definiert (jeder Typ), wird in node_modules installiert.
Der Grund für den Unterschied zwischen Abhängigkeiten / devDependencies / optionalDependencies ist, was Konsumenten Ihres Codes mit npm tun können, um diese Ressourcen zu installieren.
Gemäß der Dokumentation: https://npmjs.org/doc/json.html ...
Um diese Frage zu lösen, lautet der folgende Befehl, wenn Sie NUR die "Abhängigkeiten" mit npm installieren möchten:
Dies kann durch einen Blick auf das Git-Commit bestätigt werden, das diesen Filter hinzugefügt hat (zusammen mit einigen anderen Filtern [unten aufgeführt], um diese Funktionalität bereitzustellen).
Alternative Filter, die von npm verwendet werden können:
@dmarr versuche mit npm install --production
quelle
npm installiert dev-Abhängigkeiten bei der Installation innerhalb eines Pakets (falls sich
package.json
im aktuellen Verzeichnis eine befindet). Wenn es von einem anderen Speicherort stammt (npm-Registrierung, Git Repo, anderer Speicherort im Dateisystem), werden nur die Abhängigkeiten installiert.quelle
npm install some-module
keine Dev-Abhängigkeiten von installiertsome-module
.Ich habe festgestellt, dass Sie beim Installieren von Dev-Abhängigkeiten für ein Paket, das ein Knoten-Addon enthält, das Erstellen des Addons beim Ausführen von npm install --dev nicht vermeiden können, selbst wenn Sie nur die devDependencies installieren möchten. Also musste ich um npm's Rücken herumgehen:
Oder noch besser (und prägnanter),
quelle
Mit
npm install packageName --save
dieser Option wird ein Paket in Abhängigkeiten hinzugefügt , wenn Sie verwendennpm install packageName --save-dev
dann devDependencies .npm install packageName --save-dev
sollte zum Hinzufügen von Paketen für Entwicklungszwecke verwendet werden. Wie das Hinzufügen von TDD-Paketen (Chai, Mokka usw.). Welche werden in der Entwicklung und nicht in der Produktion verwendet.quelle
package.json
aber sobald diese Abhängigkeiten bereits gespeichert sind , können Sie dienpm
Installation nur eines bestimmten Abhängigkeitstyps erzwingen. Als ich Ihre Antwort hier las, habe ich nichts gelernt, was zur Lösung des vom OP aufgeworfenen Problems beitragen könnte.Es ist erwähnenswert, dass Sie die
NODE_ENV
Umgebungsvariable verwenden können, um das gleiche Ergebnis zu erzielen. Besonders nützlich, wenn Sie Ihre Node-Anwendung (z. B. Docker) containerisieren.Der obige Code installiert alle Ihre Abhängigkeiten außer den Entwickler-Abhängigkeiten (dh
devDependencies
).Wenn Sie Umgebungsvariablen
Dockerfile
verwenden müssen, finden Sie hier weitere Informationen .Umgebungsvariablen können bei Bedarf leicht überschrieben werden (z. B. wenn Sie Ihre Testsuite beispielsweise auf Travis CI ausführen möchten). Wenn das der Fall wäre, könnten Sie so etwas tun:
NPM-Dokumentation hier
Glückliche Containerisierung =)
quelle
Ich schlage vor, zu verwenden
npm ci
. Wenn Sie nur produktionsbedürftige Pakete installieren möchten (wie Sie geschrieben haben - ohnedevDependencies
), dann:oder
Wenn Sie Oldschool bevorzugen,
npm install
dann:oder
Hier ist eine gute Antwort, warum Sie verwenden sollten
npm ci
.quelle
npm ci
auch, nicht nurnpm install
!Zur ausgewählten Antwort muss hinzugefügt werden: Ab sofort werden
npm install
in einem Paketverzeichnis (das enthältpackage.json
) devDependencies installiert, währendnpm install -g
sie nicht installiert werden.quelle
-g
wird nicht installiertdevDependencies
, aber die Pakete werden global installiert, was häufig nicht das beabsichtigte Ergebnis ist.npm install --production
ist der richtige Weg, um Knotenmodule zu installieren, die für die Produktion benötigt werden. Weitere Informationen finden Sie in der Dokumentationquelle
Jetzt gibt es ein Problem, wenn Sie package-lock.json mit npm 5+ haben. Sie müssen es vor der Verwendung von entfernen
npm install --production
.quelle
Und gemäß der Frage, nur Abhängigkeiten zu installieren, hilft der folgende Befehl
quelle