Ich spiele herum und lerne über Gelübde mit einem persönlichen Projekt. Dies ist eine kleine clientseitige Bibliothek mit Tests in Gelübden. Daher muss ich eine Datei erstellen und testen, die wie folgt geschrieben ist:
%Vor%In meinem Test (basierend auf science.js , d3 usw.) erfordert dieses Modul Folgendes:
%Vor%Ich fuhr fort, einen "Modul nicht definierten Fehler" zu bekommen, wenn ich versuche, die Tests auszuführen, also ging ich zu einem repl und rannte:
%Vor%und es kam zurück:
%Vor%Ich realisiere, dass ich etwas tun könnte wie:
%Vor%Aber ich habe das Gefühl, dass ich ein Problem damit verursache, besonders weil die Bibliotheken, auf denen ich dieses Projekt aufbaue, es in dem von mir beschriebenen Format machen.
Ich möchte, dass sich mein Projekt ähnlich verhält wie das, auf dem ich es aufbaue, wo:
%Vor%erstellt eine Variable in diesem Namespace:
%Vor%Ich habe das in einer Vielzahl von Bibliotheken gesehen, und ich folge dem Format und dem Gedankenprozess zum T, glaube aber, dass ich etwas über Verhaltensweisen vermisse, von denen ich nichts weiß.
Es ist kein Problem, es so zu erstellen. Module definieren, was sie im Objekt module.exports
zurückgeben. Übrigens brauchen Sie eigentlich keine selbstausführenden Funktionen (SEF), es gibt kein globales Leck wie in Browsern: -)
module1.js:
%Vor%main.js:
%Vor%Sobald Sie verstanden haben, wie das funktioniert, können Sie die Versionsnummer einfach exportieren, wenn Sie möchten:
module1.js:
%Vor%main.js:
%Vor% Oder wenn Sie etwas Logik wollen, können Sie Ihre module1.js
Datei einfach so erweitern:
Oder, wie es bei vielen Modulen der Fall ist, wenn Sie einige Utility-Funktionen exportieren (und andere "privat" halten möchten), können Sie das folgendermaßen tun:
%Vor%Also, in main.js:
%Vor%Über Ihren speziellen Fall würde ich nicht empfehlen, es so zu machen, wie sie es tun.
Wenn Sie hier nachschauen: Ссылка
Sie sehen, dass sie nicht das Schlüsselwort var
verwenden. Sie erstellen also eine globale Variable .
Deshalb können sie darauf zugreifen, wenn sie require
das Modul, das die globale Variable definiert, haben.
Und übrigens, das Argument exports
ist in ihrem Fall nutzlos. Es ist sogar irreführend, da es tatsächlich das global
-Objekt ist (Äquivalent von window
in Browsern), nicht das module.exports
-Objekt ( this
in Funktionen ist das globale Objekt, es wäre undefined
im strikten Modus waren aktiviert).
Tu es nicht so, wie sie es tun, es ist eine schlechte Idee. Globale Variablen sind eine schlechte Idee, es ist besser, die Philosophie des Knotens zu verwenden und das erforderliche Modul in einer Variablen zu speichern, die Sie wiederverwenden.
Wenn Sie ein Objekt haben wollen, das Sie auf der Client-Seite verwenden und in node.js testen können, ist hier ein Weg:
yourModule.js:
%Vor% Was kann man hier verkürzen, um die global
Variable zu vermeiden:
So können Sie es auf der Client-Seite so verwenden:
%Vor%Und auf der Serverseite:
%Vor% Nur FYI, ..
bedeutet "übergeordnetes Verzeichnis". Dies ist der relative Pfad, wo das Modul abgerufen werden soll. Wenn sich die Datei im selben Verzeichnis befindet, verwenden Sie .
.