Node.js, Require und Exports

Ursprünglicher Autor: Karl Seguin
  • Übersetzung
Als ich gerade anfing, mit Node.js zu spielen, gab es nur eine Sache für mich, die mich unwohl fühlte. Interessant, aber ich rede module.exports. Interessanterweise weise ich darauf hin, dass dies schließlich einer der grundlegenden Teile von Node.js ist und es ziemlich einfach ist. Wenn ich jetzt zurückblicke, kann ich nicht erklären, warum es mich so aufgehalten hat ... Ich erinnere mich nur, dass dieser Moment für mich nicht offensichtlich war. Nun, ich glaube, ich bin einer von vielen, die ihn ein- oder zweimal getroffen haben. Zuerst war ich nur verwirrt, bevor ich etwas schrieb, indem ich es anwandte.

In Node sind alle Teile nur innerhalb derselben Datei für einander sichtbar. Mit Stücken meine ich Variablen, Funktionen, Klassen und deren Mitglieder. Zum Beispiel haben wir eine Datei mit misc.jsfolgendem Inhalt:

var x = 5;
var addX = function(value) {
  return value + x;
};

Ein vertrauter Zugriff auf eine Variable xund Funktion addXaus einer anderen Datei ist nicht möglich. Dies hat nichts mit der Nutzung zu tun var. Tatsache ist, dass Node aus Blöcken besteht, die als Module bezeichnet werden , und jede separate Datei von Natur aus ein separater Block ist, dessen Gültigkeitsbereich von anderen ähnlichen Blöcken isoliert ist.

Bevor wir nun lernen, diese Dinge außerhalb des Moduls sichtbar zu machen, werden wir genauer untersuchen, wie die Module in Node.js geladen werden. Jetzt werden wir über den Ort sprechen, an dem es geschrieben steht require. requireSie werden zum Laden eines Moduls verwendet und weisen normalerweise das Ergebnis seiner Operation einer Variablen zu:

var misc = require('./misc');

Solange unser Modul nichts zurückgibt , sind natürlich alle obigen Beispiele unbrauchbar. Und damit unser Modul etwas verrät , verwenden wir module.exports:

var x = 5;
var addX = function(value) {
  return value + x;
};
module.exports.x = x;
module.exports.addX = addX;

Jetzt ist unser Modul viel nützlicher geworden:

var misc = require('./misc');
console.log("Добавив %d к 10 мы получим %d", misc.x, misc.addX(10));

Es gibt immer noch eine Möglichkeit, Dinge aus unserem Modul zu geben :

var User = function(name, email) {
  this.name = name;
  this.email = email;
};
module.exports = User;

Der Unterschied zwischen diesen Ansätzen ist nicht groß, aber wichtig. Wie Sie sehen, exportieren wir in diesem Fall die Funktion direkt:

module.exports.User = User;
//vs
module.exports = User;

All dies, um sicherzustellen, dass es später einfacher zu bedienen sein wird:

var user = require('./user');
var u = new user.User();
//vs
var u = new user();

Der Vorteil dieser Methode ist, dass es uns in diesem Fall egal ist, ob Ihr Modul einen Container mit exportierten Werten darstellt oder nicht.

Schauen wir uns das folgende Beispiel an, um das Zusammenspiel der Module weiter zu veranschaulichen:

var powerLevel = function(level) {
  return level > 9000 ? "it's over 9000!!!" : level;
};
module.exports = powerLevel;

Wenn Sie dieses Modul über requireeine Funktion anschließen, können Sie folgende Aktionen ausführen:

require('./powerlevel')(9050);

Dies ist im Wesentlichen eine vereinfachte Notation für den folgenden Code:

var powerLevel = require('./powerlevel')
powerLevel(9050);

Ich hoffe, diese Beispiele helfen Ihnen, es sich bequem zu machen!

Jetzt auch beliebt: