2016-06-02 11 views
0

Ich habe 3 Abhängigkeiten, die alle auf esprima-fb verweisen, und die Version wird für alle von ihnen in 15001.1001.0-dev-harmony-fb aufgelöst.npm 3 flache Abhängigkeit nicht immer angewendet

Ich hatte erwartet, esprima-fb in der obersten Ebene des Ordners node_modules zu sehen, aber es ist nicht da. Sie befinden sich im Ordner node_modules jeder Abhängigkeit.

Alles funktioniert noch, aber es bedeutet, dass ich nicht erfolgreich sicherstellen kann, dass meine npm-shrinkwrap.json Datei auf dem neuesten Stand ist, weil das Tool, das ich verwende, esprima-fb auf der obersten Ebene von npm-shrinkwrap erwartet. Json-Abhängigkeiten, die nicht in den einzelnen Abhängigkeiten verschachtelt sind.

Meine Frage ist, welches Bit verhält sich in einer unerwarteten Weise? npm indem nicht mindestens 1 Version von esprima-fb auf der obersten Ebene installiert wird? Vergleichstool unter der Annahme, dass sich npm immer so verhält?

Antwort

0

Obwohl es ineffizient ist, dass npm die Abhängigkeit nicht abflacht (da alle drei Kopien davon in der gleichen Version sind, ist das ziemlich seltsam), ist dieses Verhalten absolut gültig. Das andere Tool sollte nicht erwarten, dass die Abhängigkeit auf oberster Ebene installiert wird.

Eine andere Möglichkeit, wie man es betrachtet: Was wäre, wenn diese 3 esprima-fb-Abhängigkeiten in etwas andere Versionen aufgelöst würden? In einem solchen Fall ist das Nicht-Verflachen dieser Abhängigkeiten die einzige Option.

+0

Mein Verständnis von https://docs.npmjs.com/how-npm-works/npm3 war, dass mindestens einer von ihnen (der erste npm während der Installation) auf die oberste Ebene gehisst wird. Das passiert hier nicht, also frage ich mich, was vor sich geht. – Dawn

+0

Meine Vermutung ist, dass es einige Einstellungen gibt (NPM-Pakete haben eine Unmenge von Einstellungen), die entweder npm davon abhalten, oder verwirrt npm, um sich unerwartet zu verhalten. Wenn Sie es sich leisten können, etwas Zeit mit dem Thema zu verbringen, kann es sich lohnen, das minimale Beispiel zu finden, das "scheitert" und einen Fehler in Erwägung zieht. Das heißt, ich glaube immer noch, dass Sie nicht darauf zählen sollten, dass eine (die eine? Nur eine zufällige?) Instanz des Pakets auf der obersten Ebene vorhanden sein wird. –

2

Ich lief in das gleiche Verhalten mit esprima-fb geschachtelt unter jstransform. Ich weiß nicht warum esprima-fb verschachtelt wurde, aber ich fand auch node-pre-gyp verschachtelt unter fsevents was ich glaube, weil node-pre-gyp eine gebündelte Abhängigkeit ist (siehe package.json von jstranform). Eine gebündelte Abhängigkeit wird zusammen mit dem Modul veröffentlicht. Wenn Sie sich das gzip in Ihrem npm-Cache anschauen, finden Sie die gebündelte Abhängigkeit, die innerhalb des übergeordneten Elements gepackt ist, innerhalb von node_modules. Ich nenne sie blinde Passagiere.

Verwandte Themen