2013-07-09 2 views
39

Ich habe eine Reihe von devDependencies benötigt, um Testsuite ausführen und Produktionsabhängigkeiten mit npm shrinkwrap gesperrt haben. Das Problem ist, dass, wenn ich npm install ausführen, nur Produktionsabhängigkeiten installiert sind, um devDependencies zu installieren, muss ich npm-shrinkwrap.json entfernen und es erneut ausführen.Wie man devDependencies einzieht, aber nicht installiert, wenn es nicht notwendig ist?

Wenn nun die Schrumpffolie devDependencies enthält, werden sie in der Produktion installiert, wo sie nicht benötigt werden. Sicherlich sollte es einige Befehlszeilenargumente geben, um zu erzwingen, dass nur normale Abhängigkeiten installiert werden?

Antwort

48

September 2016:

Wie auch andere erwähnt haben, gibt es einige große Anstrengungen waren mit npm v3.10.8 Start der shrinkwrap Funktion zu verbessern.

Dank this, wird es möglich sein, halten Sie Ihre devDependencies gesperrt, während nur die Produktion Abhängigkeiten installieren:

npm shrinkwrap --dev 
npm install --only=prod 

2013 Antwort:

Wie in der NPM docs angegeben:

Da npm shrinkwrap Ihre Abhängigkeiten für Produktionsnutzung sperren soll, wird devDependencies nicht aufgenommen, es sei denn, Sie setzen explizit das --dev Flag, wenn Sie npm shrinkwrap ausführen. Wenn installiert devDependencies ausgeschlossen sind, wird npm eine Warnung ausgeben. Wenn Sie möchten, dass sie standardmäßig mit Ihrem Modul installiert werden, beachten Sie bitte , sie stattdessen in Abhängigkeiten zu integrieren.

Grundsätzlich, oder Sie sperren alle Deps, oder nur die Produktion Deps.

Nicht einmal ausgeführt npm install --dev oder npm install --force kann die Shrinkwrap-Funktionalität überschreiten.

+4

es also im Grunde keine Möglichkeit zu tun, was ich nach? – Fluffy

+0

Durch das CLI ist es, wie es scheint. Du könntest Code schreiben, vielleicht ein Postinstall-NPM-Skript, das deine Dev-Abhängigkeiten installiert, wenn zum Beispiel ein argv '--dev' übergeben wird. – gustavohenke

+0

Dies könnte bald kommen, siehe diese Pull-Anfrage: https://github.com/npm/npm/pull/10073 – mikestaub

1

Es sieht aus wie diese Funktion vor kurzem in v3.3 des NPM-Client gemäß den jetzt changelog

aufgenommen Sie werden in der Lage sein zu laufen npm install --only=prod den gewünschten Effekt zu erzielen.

+3

Nicht wahr. Dies ist das gleiche wie 'npm install --production' mit den gleichen Problemen, die durch' npm-shrinkwrap.json' überschrieben werden. – RushPL

+3

'npm shrinkwrap --also = dev' für die faulen. Vielen Dank –

1

EDIT 2016/09/13

Ich habe npm v3.10.8 erprobt, und diese Funktionalität funktioniert nun wie erwartet. Wir haben unsere devDependencies verkleinert und können bei der Bereitstellung nur Prod-Abhängigkeiten installieren.


Ich denke, es ist erwähnenswert, dass diese Funktion bald wie erwartet funktionieren sollte. Nach diesem Github issue, tonnenweise Leute laufen auf das gleiche Problem, und nach dieser pull request, wird es in der nächsten Version sein (geplant für 2016-09-08).

Mit dem Pull-Request in verschmolzen, alle würden Sie tun müssen, ist:

npm i --only=prod 
0

Was npm 5 (Ich habe versucht, auf 5.5.1 und 5.6.0), --production (--only = prod: npm install --production sollte nicht dev deps in einem shrinkwrap von npm shrinkwrap --dev erstellt installieren) Flagge ist problematisch.

Wenn Paket-lock.json im Ordner vorhanden ist, ändert sich

npm shrinkwrap --production 

einfach den Dateinamen npm-shrinkwrap.json.

Wie ich es geschafft, dieses Problem zu lösen, ist auszuführen:

npm prune --production 

und dann laufen:

npm shrinkwrap --production