Heim > Web-Frontend > Front-End-Fragen und Antworten > nodejs exportiert die Nutzung

nodejs exportiert die Nutzung

WBOY
Freigeben: 2023-05-14 10:31:06
Original
916 Leute haben es durchsucht

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.exportsexports是模块化中常用的概念,本文将介绍它们在Node.js中的用法。

module.exports和exports的关系

在Node.js中,每个文件就是一个独立的模块,想要在其它模块中使用该文件内部的变量和函数,需要将其导出。module.exportsexports这两个变量都可以进行导出操作。

在Node.js中,每个模块都有一个module对象,该对象包含了模块的相关信息,其中就有一个exports属性。exports将要导出的变量或函数挂载在该属性上,然后通过require()函数在外部引用该模块并调用其导出的变量和函数。

默认情况下,exports指向的是module.exports的引用,所以通过exportsmodule.exports都可以进行模块导出,但是需要注意的是,二者的指向关系不是一直相同的,导致有时候我们需要使用module.exports而不是exports

对比exports和module.exports

当我们使用exports导出一个对象时,实际上是向exports添加了一个属性并赋值。例如:

// add.js
exports.add = function (a, b) {
  return a + b;
}
Nach dem Login kopieren

上述代码中,我们使用exportsadd()方法导出。相当于执行了以下代码:

exports.add = function (a, b) {
  return a + b;
}

module.exports = exports; // exports被默认指向module.exports
Nach dem Login kopieren

接下来让我们看一个示例:

// 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
Nach dem Login kopieren

通过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;
Nach dem Login kopieren

注意:如果只是给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
Nach dem Login kopieren

在上述代码中,将exports指向了一个新的对象,但是没有对其属性进行赋值,所以导出的值为undefined,所以在调用时会出现TypeError。

exports和module.exports的使用场景

在大多数情况下,我们可以直接使用exports进行模块导出。但是有时候,我们需要将模块直接导出一个函数或对象,而不是将它们挂载在exports上,此时就需要使用module.exports了。

例如:

// foo.js
module.exports = function () {
  console.log('Hello World!')
}

// app.js
const foo = require('./foo');
foo(); // Hello World!
Nach dem Login kopieren

在上述代码中,直接将一个函数赋值给module.exports

Die Beziehung zwischen module.exports und exports

In Node.js ist jede Datei ein unabhängiges Modul. Wenn Sie die Variablen und Funktionen in der Datei in anderen Modulen verwenden möchten, müssen Sie sie exportieren. Es können beide Variablen 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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage