2016-08-09 34 views
1

Dies ist eine Frage, über die ich nachgedacht habe. Ist es möglich, dass ein Node-Projekt auf eine rekursive und unendliche Paketabhängigkeit trifft? Was ich meine, ist folgendes.NodeJs Package.json Unendliche rekursive Abhängigkeit

Angenommen, die Hauptanwendung hat das Paket A in seinem Abhängigkeitsabschnitt Package.json aufgelistet. Angenommen, dieses Paket A hängt von einem Paket B ab. Das heißt, node_modules/A/Package.json enthält B im Abhängigkeitsabschnitt.

Angenommen, in einer verrückten Kombination von Ereignissen hängt Paket B von einem anderen Paket C (C! = A) ab, das jedoch A als Abhängigkeit hat. Um zu klären,

node_modules/A/node_modules/B/package.json - contains C as dependency 
node_modules/A/node_modules/B/node_modules/C/package.json - contains A as dependency 

Meine Frage ist zweifach. Erstens: Ist eine solche Situation in der Praxis überhaupt möglich? Zweitens, wie würde es gelöst werden? Es scheint mir, dass npm install diese App für eine Endlosschleife der Installation senden würde.

Antwort

1

OP: Ist es möglich, dass ein Node-Projekt auf eine rekursive und unendliche Paketabhängigkeit trifft?

Nr

Vom documented algorithm, da der Abhängigkeitsbaum geht, wird „Abhängigkeiten werden so nah an der Spitze hinzugefügt werden, wie möglich ist.“ Das Beispiel auf dieser Seite besagt, dass wenn Sie ein Paket A haben, das von einem Paket B und einem Paket C abhängt, und Paket B auch von Paket C abhängt, wird die Abhängigkeit in Paket B bereits durch die Kopie aufgelöst installiert für Paket A.

Also in Ihrem Beispiel würde die Abhängigkeit von Paket C von A durch die Abhängigkeit der Hauptanwendung von A erfüllt sein. Es ist nicht nötig, sie erneut zu holen.

Die Dinge werden jedoch ein wenig schwierig, wenn Sie Abhängigkeiten zu finden beginnen, die Abhängigkeiten von verschiedenen Versionen von Abhängigkeiten bereits erfüllt haben. In der Tat ist dies die next section auf dieser Seite spricht speziell über:

npm flat-out einen beliebigen Namen @ Version, die bereits überall in der Struktur des Paketordner installieren verweigert vorfahren

Sie taten geben Sie diese rekursive Abhängigkeit Installation Zeug some thought.