2016-04-26 18 views
2

FYI: mein Verständnis von npm semantische Versionierung kommt von the npm docs und this article.Unerwarteter NPM PeerDependency Fehler

Ich aktualisiere Reagieren von Version 0.13.3 auf 0.14.8 in einem Projekt mit vielen Abhängigkeiten. Wenn ich 'npm install' ausführe, würde ich erwarten, Peer-Dependency-Fehler für Pakete zu erhalten, die eine Versionskompatibilität angeben, die [email protected] nicht erfüllt.

... statt, ich bin Fehler für JEDE Abhängigkeit bekommen, die Listen als peerDependency Reaktion, auch wenn v0.14.8 der Spezifikation semver peerDependency erfüllt: The cli error.

die Fehler durch das erste Paket geworfen Prüfungs: react-color-picker 2.1.9 möchte eine Version von React größer oder gleich 0.12.0. Dies wird in reagieren Farb-Pickers package.json angegeben:

enter image description here

... aber 0.14.8 ist in der Tat mehr als 0.12.0. Warum wird dieser Fehler ausgelöst?

Außerdem, auch wenn ich manuell eine dieser Problempaket der peerDependency spec ‚wollen‘ genau die Version Reagieren ändern, dass ich es (v0.14.8) gebe, wirft npm noch ein peerDependency Fehler für das Paket:

Ändern 'reagieren Farb-Picker' package.json peerDependency spec:

enter image description here

... Ergebnisse in: enter image description here

Wat?

Bearbeiten 1: Dieses Problem hält das Projekt nicht zurück; Das manuelle Aktualisieren der Pakete, die die Fehler in ihren neuesten Versionen verursachen, beseitigt die Fehler. Aber ich frage mich, warum npm diese Fehler an erster Stelle wirft, wenn es keine sichtbaren Probleme mit den peerDependency-Spezifikationen gibt.

... auch, falls es mehr Einblick bietet, ist hier die package.json Datei: enter image description here

Edit 2: Obwohl es sicherlich nichts nicht beheben können einzelne Fehler, die durch das Entfernen der zum Schweigen gebracht werden peerDependency spec aus dem package.json eines Pakets reagiert, dass Fehler, etwa so: enter image description here

... nachdem dies zu tun, aber Pakete, die trotz sind erroring von peerDependency Spezifikationen reagieren, die aussehen wie sie sollten noch Fehler arbeiten .

+0

Sie könnten die neuesten Versionen von Nodejs und Npm versuchen. Es sieht wie ein Käfer aus. Andernfalls haben Sie nach der Aktualisierung von React versucht, alle Module gleichzeitig neu zu installieren? Können Sie die Konfiguration von package.json teilen? –

+0

Re node und npm: Das Projekt ist an einem Punkt, dass die Aktualisierung von Knoten und npm nicht trivial sind, also würde ich gerne sehen, ob es eine andere Option gibt. Re Neuinstallation alle gleichzeitig nach der Reaktion upgrade: Haben versucht, dass; Npm wirft immer noch die gleichen Fehler. – user2839246

+0

Dies kann ein Unterschied in der Version zwischen globalen und lokalen Installationen sein. Überprüfen Sie, welche Versionen global oder lokal installiert wurden, und stellen Sie dann sicher, dass die Peer-Abhängigkeiten im selben node_modules-Verzeichnis installiert sind. – KCaradonna

Antwort

0

Peer Abhängigkeiten sind spezielle, so tut mir leid, wenn ich durch eine Wiederholung der Grundlagen beginnen.

NPM fragt sich: „Ist die Abhängigkeit sehe ich schon zufrieden? Wenn nicht, lassen Sie mich auf der höchsten Ebene der Verzeichnisstruktur eine Version installieren ich finden kann.“ Wenn eine Version von ‚superfoo‘ von Ihnen Programm erforderlich ist, und die ‚superbar‘ -Paket Sie eine andere Version von ‚superfoo‘ erforderlich benötigt, installiert npm eine Version in ./node_packages und ein anderer in ./node_packages/superbar/node_packages. NPM nicht den Baum optimiert so wenige Kopien wie möglich zu installieren. Wenn Sie eine npm -la | more laufen Sie ein Gefühl dafür, wie viele Kopien der Pakete erhalten werden überall installiert.

Dann erhalten Sie Peer-Abhängigkeiten. Diese sind insofern besonders, als dass die Installation einer neuen Kopie nicht funktioniert. Die Idee ist, dass "react-color-picker" oder jeder andere Peer mit der genau installierten Version interagieren muss. Wenn "react-color-picker" 0.14.x und "react-waypoint" 0.13.x wollen, gibt es keine Möglichkeit beide zu befriedigen, also gibt npm einfach auf. Das passiert hier.

Sie könnten durch alle React-Abhängigkeiten grep, um die ungerade herauszufinden. Die Fehlermeldungen könnten besser sein. Beginnen Sie mit der Prüfung von 'reactive-waypoint' und 'react-color-picker'. Wenn Sie einen legitimen Konflikt haben, also zwei Pakete, die versuchen, sich an verschiedene, inkompatible Versionen anzuschließen, müssen Sie es herausfinden und etwas JavaScript-Code ändern. Es ist nicht alles nur package.json Buchhaltung.