2014-08-29 13 views
5

Ich schreibe ein Mongo-Shell-Skript für die Datenverwaltung. Ich möchte es mit einem modularen Code schreiben, der Funktionsbibliotheken als Module verwendet. In einigen Fällen meine eigenen Module. In anderen Fällen werden sorgfältig ausgewählte Module von node.js (die ich kenne, in der Mongo-Shell-Umgebung funktionieren, beispielsweise uuid) verwendet.Wie zu "erfordern (Modul)" in Mongo Shell

Leider fehlt Mongo echte Modulverwaltung. load() ist nicht dasselbe. Ich suche nach einer Hinterfüllung, sozusagen.

Kennt jemand eine Bibliothek, die CommonJS-Modulladefunktionalität bereitstellen kann, die generisch genug ist, um in der Mongo-Shell ausgeführt zu werden, oder die für die Ausführung in der Mongo-Shell portiert wurde?

Ja, ich weiß, ich könnte es nur in einer node.js-Umgebung tun. Aber wenn es so etwas wie einen echten Modullader gibt, der in der Mongo-Shell funktioniert, wäre das meine erste Wahl.

+0

Die 'Mongo'-Shell ist eine eingeschränktere JavaScript-Umgebung als Node.js (insbesondere wenn es um I/O-Optionen geht). Wenn Sie Knotenmodule verwenden möchten, warum implementieren Sie Ihr Skript nicht direkt in Node? – Stennie

Antwort

0

Nein. Die Mongo-Shell ist eine eigene Javascript-Umgebung, die die V8-Engine ausführt. Sie können Node.js-Module nicht mehr in die Mongo-Shell laden, als Sie in den Browser können. Viele Node-Funktionen sind nicht Teil der Mongo-Shell-Umgebung. Sie können entweder den Node.js-Treiber in Node.js verwenden, so dass Sie Ihre Node-Module verwenden können, oder Sie können versuchen, die erforderlichen Bits in eine js-Datei zu bekommen, die Sie beim Ausführen der Shell ausführen können. z.B

mongo --shell mymongohost:port/myDB myjsfunctions.js 
+1

Ich habe meine Frage geklärt. Es geht nicht darum, beliebige node.js-Module auszuführen. Es geht darum, modularen Code mit einer Standardsyntax zu schreiben. –

+0

Es gibt keinen Modullader oder ähnliches, AFAIK. Das Beste, was Sie haben, ist das Ausführen eines Skripts beim Start der Shell, entweder um etwas zu tun oder um Funktionen und Variablen im Bereich einzurichten. Ich bin mir sicher, dass die Leute eine Art Modullader gut gebrauchen würden (Wink zwinker). – wdberkeley

+0

würde ich! :) Ich würde einen Riss in der Portierung der CommonJS-Sachen machen, wenn ich es finden könnte. Die Website scheint kaputt zu sein. :( –

2

Nun, es gibt ein paar Tipps, damit es funktioniert.

Die erste, wenn Ihr Commonjs Modul kein Modul benötigt ist ein einfaches Beispiel:

var module = {}; 

load('/lib/migration/forms.js'); 

print(typeof module.exports); 

Die zweiten, wenn Ihr Modul erfordert andere ist ein einzelnes Modul mit browserify zu bauen und erfordert es, wie im obigen Beispiel .

Verwandte Themen