Node.js ist eine auf der Chrome V8-Engine basierende Programmiersprache, die die Ausführung von JavaScript auf dem Server ermöglicht. Sie kann Module und Pakete verwenden, um Programme einfach zu organisieren und Abhängigkeiten zu verwalten. Unter diesen sind module.exports
und exports
häufig verwendete Konzepte bei der Modularisierung. In diesem Artikel wird ihre Verwendung in Node.js vorgestellt. module.exports
和exports
是模块化中常用的概念,本文将介绍它们在Node.js中的用法。
在Node.js中,每个文件就是一个独立的模块,想要在其它模块中使用该文件内部的变量和函数,需要将其导出。module.exports
和exports
这两个变量都可以进行导出操作。
在Node.js中,每个模块都有一个module
对象,该对象包含了模块的相关信息,其中就有一个exports
属性。exports
将要导出的变量或函数挂载在该属性上,然后通过require()
函数在外部引用该模块并调用其导出的变量和函数。
默认情况下,exports
指向的是module.exports
的引用,所以通过exports
和module.exports
都可以进行模块导出,但是需要注意的是,二者的指向关系不是一直相同的,导致有时候我们需要使用module.exports
而不是exports
。
当我们使用exports
导出一个对象时,实际上是向exports
添加了一个属性并赋值。例如:
// add.js exports.add = function (a, b) { return a + b; }
上述代码中,我们使用exports
将add()
方法导出。相当于执行了以下代码:
exports.add = function (a, b) { return a + b; } module.exports = exports; // exports被默认指向module.exports
接下来让我们看一个示例:
// math.js exports.add = function (a, b) { return a + b; }; exports.sub = function (a, b) { return a - b; }; // app.js const math = require('./math'); console.log(math.add(1, 1)); // 2 console.log(math.sub(1, 1)); // 0
通过require()
函数引用math
模块并调用其导出的方法,结果正确输出。为什么是正确的呢?
我们知道exports
默认指向module.exports
,而当我们直接将exports
指向一个新的对象时,module.exports
的指向关系就已经被改变了。而Node.js在加载模块时,实际上返回的是module.exports
对象而不是exports
对象,所以将exports
指向一个新的对象后,再将该新对象作为module.exports
的值,才是真正的导出操作。
exports = { add: function (a, b) { return a + b; }, sub: function (a, b) { return a - b; }, } module.exports = exports;
注意:如果只是给exports
的属性重新赋值,并不会改变它和module.exports
之间的指向关系。
例如:
// multiply.js exports = { mul: function (a, b) { return a * b; } } // app.js const multiply = require('./multiply'); console.log(multiply.mul(2, 5)); // TypeError: multiply.mul is not a function
在上述代码中,将exports
指向了一个新的对象,但是没有对其属性进行赋值,所以导出的值为undefined
,所以在调用时会出现TypeError。
在大多数情况下,我们可以直接使用exports
进行模块导出。但是有时候,我们需要将模块直接导出一个函数或对象,而不是将它们挂载在exports
上,此时就需要使用module.exports
了。
例如:
// foo.js module.exports = function () { console.log('Hello World!') } // app.js const foo = require('./foo'); foo(); // Hello World!
在上述代码中,直接将一个函数赋值给module.exports
module.exports
und exports
exportiert werden. In Node.js verfügt jedes Modul über ein module
-Objekt, das modulbezogene Informationen enthält, einschließlich eines exports
-Attributs. exports
Mounten Sie die zu exportierenden Variablen oder Funktionen auf dieser Eigenschaft, verweisen Sie dann extern über die Funktion require()
auf das Modul und rufen Sie seine exportierten Variablen und Funktionen auf. 🎜🎜Standardmäßig verweist exports
auf einen Verweis auf module.exports
, also über exports
und module.exports
kann Module exportieren, es sollte jedoch beachtet werden, dass die Zeigebeziehung zwischen den beiden nicht immer dieselbe ist, sodass wir manchmal module.exports
anstelle von exports
verwenden müssen. 🎜🎜Vergleichen Sie exports und module.exports🎜🎜Wenn wir exports
verwenden, um ein Objekt zu exportieren, fügen wir tatsächlich ein Attribut zu exports
hinzu und weisen einen Wert zu. Zum Beispiel: 🎜rrreee🎜Im obigen Code verwenden wir exports
, um die Methode add()
zu exportieren. Dies entspricht der Ausführung des folgenden Codes: 🎜rrreee🎜 Schauen wir uns als Nächstes ein Beispiel an: 🎜rrreee🎜 Referenzieren Sie das Modul math
über die Funktion und den Aufruf require()
seine exportierte Methode, Das Ergebnis wird korrekt ausgegeben. Warum ist es richtig? 🎜🎜Wir wissen, dass exports
standardmäßig auf module.exports
verweist, und wenn wir exports
direkt auf ein neues Objekt verweisen, module . Die Zeigebeziehung der Exporte
wurde geändert. Wenn Node.js ein Modul lädt, gibt es tatsächlich das Objekt module.exports
anstelle des Objekts exports
zurück, also verweisen Sie exports
auf ein neues Objekt , und verwenden Sie dann das neue Objekt als Wert von module.exports
, dem eigentlichen Exportvorgang. 🎜rrreee🎜Hinweis: Wenn Sie einfach das Attribut von exports
neu zuweisen, ändert sich dadurch die Verweisbeziehung zwischen ihm und module.exports
nicht. 🎜🎜Zum Beispiel: 🎜rrreee🎜Im obigen Code zeigt exports
auf ein neues Objekt, dessen Eigenschaften jedoch nicht zugewiesen sind, sodass der exportierte Wert undefiniert
ist Beim Aufruf tritt ein TypeError auf. 🎜🎜Verwendungsszenarien von Exports und module.exports🎜🎜In den meisten Fällen können wir exports
direkt zum Exportieren von Modulen verwenden. Aber manchmal müssen wir eine Funktion oder ein Objekt direkt aus dem Modul exportieren, anstatt sie auf exports
zu mounten. In diesem Fall müssen wir module.exports
verwenden. 🎜🎜Zum Beispiel: 🎜rrreee🎜Im obigen Code wird beim direkten Zuweisen einer Funktion zu module.exports
die Funktion tatsächlich als Exportobjekt des gesamten Moduls verwendet. 🎜🎜Summary🎜🎜exports und module.exports sind Variablen, die zum Exportieren von Modulen in Node.js verwendet werden. Sie können sie verwenden, um die Variablen oder Funktionen des Moduls für die externe Verwendung verfügbar zu machen. Beachten Sie, dass exports auf Module verweist Standardmäßig verweist die Beziehung nicht immer auf dasselbe Objekt, daher müssen wir manchmal module.exports anstelle von exports verwenden. Wenn Sie Exporte und module.exports zum Exportieren von Modulen verwenden möchten, können Sie entsprechend der tatsächlichen Situation auswählen. 🎜Das obige ist der detaillierte Inhalt vonnodejs exportiert die Nutzung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!