2016-06-27 5 views
0

Ich versuche, einen Dienst von nodejs in ringojs zu migrieren. Ich habe ein Problem mit der Verwendung von require(). Zum Beispiel dies berücksichtigen:Ruft RingoJS auf, um nach erforderlichen Modulen im Verzeichnis node_modules zu suchen

var restify = require('restify'); 

RingoJS nicht das restify Modul finden kann, weil es nicht schauen im node_modules Verzeichnis nicht kennt. Ich kann node_modules zu dem Pfad hinzufügen, den RingoJS verwendet (und ich tat), aber das hilft nicht, wenn Aufrufe require(), , weil die Module in der Verzeichnisstruktur verschachtelt sind.

Gibt es eine Möglichkeit, RingoJS nach erforderlichen Modulen im Verzeichnis node_modules zu suchen?

Antwort

0

Mit der Option -m können Sie dem Modulsuchpfad von Ringo zusätzliche Verzeichnisse hinzufügen. Beispiel: Installieren Sie underscore über Npm mit npm install underscore und starten Sie Ringo mit ringo -m ./node_modules yourscript.js. Undersocre verfügbar sein und kann wie erwartet erforderlich:

const _ = require("underscore"); 
    // logs --> "3,6,9" 
    console.log(_.map([1, 2, 3], function(num) { 
     return num * 3; 
    })); 

Ihr spezifisches Problem scheint nur, dass restify ist zu sein kompatibel mit Node.js und nicht mit anderen Commonjs-ähnlichen Plattformen. Es könnte einige Untermodule haben, die mit Ringo kompatibel sind, aber bisher habe ich noch keine gefunden. Ringo's package.json ist nicht 1: 1 kompatibel mit package.json des Knotens/npm. Wenn restify einige knotenspezifische Elemente im Paketdeskriptor verwendet, kann Ringo diese Ressourcen nicht laden.

Ringo ist immer noch sehr nah an den Ideen hinter CommonJS mit seinen verschiedenen standardisierten Modulen, während Node diesen Weg vor langer Zeit verlassen hat. Sie finden CommonJS-Module (die require() verwenden, um ein Modul zu laden) in Node, aber nicht die verschiedenen anderen APIs, die CommonJS für serverseitiges JavaScript einrichten wollte.

Auch Ringo ist nicht um Callbacks/eine ereignisgesteuerte nicht blockierende I/O herum aufgebaut. Sie können nicht blockierende E/A auf Ringo verwenden, aber Sie können auch bei blockierenden E/A bleiben. Dies ist bei Node.js anders, wo Sie auf nicht blockierende Weise entwickeln müssen und alles darauf optimiert ist, mit dem ereignisgesteuerten Modell reibungslos zu arbeiten.

Verwandte Themen