Inhaltsverzeichnis
module.exports和exports的关系
对比exports和module.exports
exports和module.exports的使用场景
Heim Web-Frontend Front-End-Fragen und Antworten nodejs exportiert die Nutzung

nodejs exportiert die Nutzung

May 14, 2023 am 10:31 AM

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!

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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Reacts Rolle bei HTML: Verbesserung der Benutzererfahrung Reacts Rolle bei HTML: Verbesserung der Benutzererfahrung Apr 09, 2025 am 12:11 AM

React kombiniert JSX und HTML, um die Benutzererfahrung zu verbessern. 1) JSX bettet HTML ein, um die Entwicklung intuitiver zu gestalten. 2) Der virtuelle DOM -Mechanismus optimiert die Leistung und reduziert den DOM -Betrieb. 3) Komponentenbasierte Verwaltungs-Benutzeroberfläche zur Verbesserung der Wartbarkeit. 4) Staatsmanagement und Ereignisverarbeitung verbessern die Interaktivität.

Reagieren Sie Komponenten: Erstellen wiederverwendbarer Elemente in HTML Reagieren Sie Komponenten: Erstellen wiederverwendbarer Elemente in HTML Apr 08, 2025 pm 05:53 PM

React -Komponenten können durch Funktionen oder Klassen definiert werden, wobei die UI -Logik eingefasst und Eingabedaten durch Props akzeptiert werden. 1) Komponenten definieren: Verwenden Sie Funktionen oder Klassen, um Reaktierungselemente zurückzugeben. 2) Rendering -Komponente: React -Aufrufe rendern Methode oder führt die Funktionskomponente aus. 3) Multiplexing -Komponenten: Daten durch Requisiten übergeben, um eine komplexe Benutzeroberfläche zu erstellen. Mit dem Lebenszyklusansatz von Komponenten kann die Logik in verschiedenen Phasen ausgeführt werden, wodurch die Entwicklungseffizienz und die Wartbarkeit des Codes verbessert werden.

Was sind die Einschränkungen des Reaktivitätssystems von Vue 2 in Bezug auf Array- und Objektänderungen? Was sind die Einschränkungen des Reaktivitätssystems von Vue 2 in Bezug auf Array- und Objektänderungen? Mar 25, 2025 pm 02:07 PM

Das Reaktivitätssystem von VUE 2 kämpft mit der Einstellung der Direktarray -Index, der Längenänderung und der Addition/Löschung der Objekteigenschaften. Entwickler können die Mutationsmethoden von VUE und VUE.SET () verwenden, um die Reaktivität sicherzustellen.

Reagieren und das Frontend: Bauen Sie interaktive Erlebnisse auf Reagieren und das Frontend: Bauen Sie interaktive Erlebnisse auf Apr 11, 2025 am 12:02 AM

React ist das bevorzugte Werkzeug zum Aufbau interaktiver Front-End-Erlebnisse. 1) React vereinfacht die UI -Entwicklung durch Komponentierungen und virtuelles DOM. 2) Komponenten werden in Funktionskomponenten und Klassenkomponenten unterteilt. Funktionskomponenten sind einfacher und Klassenkomponenten bieten mehr Lebenszyklusmethoden. 3) Das Arbeitsprinzip von React beruht auf virtuellen DOM- und Versöhnungsalgorithmus, um die Leistung zu verbessern. 4) State Management verwendet Usestate oder diese. 5) Die grundlegende Verwendung umfasst das Erstellen von Komponenten und das Verwalten von Status, und die erweiterte Verwendung umfasst benutzerdefinierte Haken und Leistungsoptimierung. 6) Zu den häufigen Fehlern gehören unsachgemäße Statusaktualisierungen und Leistungsprobleme, Debugging -Fähigkeiten umfassen die Verwendung von ReactDevtools und exzellent

Was sind die Vorteile der Verwendung von TypeScript mit React? Was sind die Vorteile der Verwendung von TypeScript mit React? Mar 27, 2025 pm 05:43 PM

TypeScript verbessert die Reaktionsentwicklung, indem sie die Sicherheit Typ, Verbesserung der Codequalität und eine bessere Unterstützung für eine IDE bietet, wodurch Fehler verringert und die Wartbarkeit verbessert werden.

Wie können Sie den Usereducer für komplexes Staatsmanagement verwenden? Wie können Sie den Usereducer für komplexes Staatsmanagement verwenden? Mar 26, 2025 pm 06:29 PM

In dem Artikel wird der Usereducer für komplexes Zustandsmanagement in React erläutert, wobei die Vorteile gegenüber Usestate detailliert beschrieben werden und wie sie in die Nutzung für Nebenwirkungen integriert werden können.

Was sind funktionale Komponenten in Vue.js? Wann sind sie nützlich? Was sind funktionale Komponenten in Vue.js? Wann sind sie nützlich? Mar 25, 2025 pm 01:54 PM

Funktionelle Komponenten in vue.js sind zustandslos, leicht und fehlen Lebenszyklushaken, die ideal für die Rendern von reinen Daten und zur Optimierung der Leistung. Sie unterscheiden

Wie stellen Sie sicher, dass Ihre React -Komponenten zugänglich sind? Welche Tools können Sie verwenden? Wie stellen Sie sicher, dass Ihre React -Komponenten zugänglich sind? Welche Tools können Sie verwenden? Mar 27, 2025 pm 05:41 PM

In dem Artikel werden Strategien und Tools erörtert, um sicherzustellen, dass React -Komponenten zugänglich sind und sich auf semantische HTML, ARIA -Attribute, Tastaturnavigation und Farbkontrast konzentrieren. Es empfiehlt die Verwendung von Tools wie Eslint-Plugin-JSX-A11Y und AXE-CORE für Testi

See all articles