2013-05-27 13 views
6

Ich bin neu in der Welt von node.js und ich fragte, wie ich mit Versionskonflikten umgehen könnte (die oft mit transitiven Abhängigkeiten erscheint): im Internet fand nur dieser Artikel nützlich für mich http://nodejs.org/api/modules.html#modules_addenda_package_manager_tips.Abhängigkeiten Versionen Konflikte auf node.js

So scheint es, dass ich mich nicht um Konflikte kümmern muss, weil die Pakete in node.js verwaltet werden. Bin ich falsch, vermisse ich etwas? Das erscheint mir seltsam (aber immer noch sinnvoll), ich bin gewohnt, Abhängigkeiten mit maven zu handhaben, indem ich die transitiven Abhängigkeiten setze, die nicht heruntergeladen werden müssen.

Jede Hilfe ist willkommen, danke.

Antwort

6

npm und der Knoten require System wird dies automatisch für Sie erledigen. Zum Beispiel kann Ihr Programm von dep1 und dep2 abhängen. dep1 kann erfordern subdep Version 1.0 und dep2 kann erfordern subdep Version 2.0, und npm wird mehrere Versionen installieren, damit jedes Modul die Abhängigkeit Versionen erhält, die es benötigt.

your-module/ 
    node_modules/ 
     dep1/ 
      node_modules/ 
       subdep/ (1.0) 
     dep2/ 
      node_modules/ 
       sudbep/ (2.0) 
+2

Toll, danke: Ich war hauptsächlich auf der Suche nach einer offiziellen Referenz, und dann eine Bestätigung, dass ich Recht hatte. Nach Ihrem Link fand ich den Abschnitt "Warum kann npm nicht einfach alles an einen Ort bringen, wie andere Paketmanager?" was wiederum auf https://npmjs.org/doc/folders.html hinweist. Insbesondere habe ich in den Ordnerdokumenten _the_ answer im Abschnitt "examples" des Abschnitts "Zyklen, Konflikte und Ordner-Parsimony" gefunden. – reallynice

+0

Gibt es eine Möglichkeit, dieses Verhalten zu verbieten? Also wenn es einen Konflikt gibt. Verwenden Sie die niedrigste Nummer – Daniel

+1

Nein, gibt es nicht. Denn das würde sehr wahrscheinlich zur Laufzeit abstürzen. Wenn depA [email protected] benötigt und depB [email protected] benötigt und npm nur [email protected] installiert ist, würde depA versuchen, die neuen 2.0.0 APIs zu benutzen, die nicht existieren würden, und das Programm stürzt mit einem Ausnahme. –