Heim Web-Frontend js-Tutorial Eine kurze Diskussion über das Funktionsprinzip von require() in Node.js

Eine kurze Diskussion über das Funktionsprinzip von require() in Node.js

Sep 27, 2020 pm 01:42 PM
node.js require()

Eine kurze Diskussion über das Funktionsprinzip von require() in Node.js

【Video-Tutorial-Empfehlung: node js-Tutorial

Die meisten Leute wissen, was die Funktion require() in Node.js macht, aber wie viele Leute wissen, wie sie funktioniert? Wir verwenden es täglich zum Laden von Bibliothekspaketen und Modulen, aber sein internes Verhalten ist rätselhaft.

Wir verfolgen den Kern des Node-Modulsystems: module.js. Diese Datei enthält eine überraschende magische Funktion. Sie ist für das Laden, Kompilieren und Zwischenspeichern jeder verwendeten Datei verantwortlich.

function Module(id, parent) { 
  this.id = id; 
  this.exports = {}; 
  this.parent = parent; 
  // ...
Nach dem Login kopieren

Dieser Modultyp ist in module.js zu finden und spielt zwei Hauptrollen: Erstens bietet er eine Grundfunktionalität für alle Node.js-Module, um eine Instanz zu erstellen, sobald ihre Datei geladen wird, und bleibt sogar bestehen, wenn die Datei geladen wird run, Deshalb können wir module.exports einige Eigenschaften hinzufügen und sie bei Bedarf zurückgeben.

Die zweite Sache des Moduls besteht darin, den Lademechanismus des Node-Moduls zu verwalten. Die Standard-Require-Funktion ist eigentlich eine Abstraktion, die auf module.require basiert. Letztere ist nur ein einfacher Wrapper für Module._load jeder Datei. Schauen Sie sich den Code an, der ungefähr wie folgt lautet:

Module._load = function(request, parent, isMain) { 
  // 1.在Module._cache中检查模块是否被缓存
  // 2.如果缓存中为空,创建一个新的模块实例。
  // 3. 保存到缓存
  // 4. 使用指定的名称调用module.load() 
  //    在读取了文件内容后将调用module.compile() 
  // 5.如果加载和分析文件时有错误
  //    从缓存中删除坏的模块
  // 6. 返回 module.exports 
};
Nach dem Login kopieren

Module._load ist für das Laden neuer Module und die Verwaltung des Modul-Cache verantwortlich. Durch das Zwischenspeichern jedes Moduls kann die Häufigkeit des Lesens von Dateien verringert werden, wodurch die Leistung gemeinsam genutzter Modulinstanzen verbessert wird -Betrieb wie Singleton-Module. Speicherstatus anwenden.

Wenn ein Modul nicht im Cache vorhanden ist, liest Module._load die Datei und erstellt eine neue. Nach dem erfolgreichen Lesen des Dateiinhalts wird module._compile aufgerufen.

Wenn Sie den sechsten Schritt oben beachten, Sie werden sehen, dass die Rückgabe module.exports ist. Deshalb können Sie beim Definieren einer öffentlichen Schnittstelle exports und module.exports verwenden, da diese tatsächlich das sind, was Model._load und eine Rückgabe erfordern.

Werfen wir einen Blick auf module._compile:

Module.prototype._compile = function(content, filename) { 
  // 1. 创建调用模块需要的require标准函数
  // 2.将其他帮助方法加入require. 
  // 3.包装JS代码到一个函数,这个函数提供我们的require
  //  模块, 比如变量本地化到模块的作用域
  // 4.返回这个函数
};
Nach dem Login kopieren

Die Magie geschieht hier: Zuerst wird eine spezielle Standard-Require-Funktion erstellt. Dies ist die Funktion require(), mit der wir vertraut sind Es enthält auch einige Hilfseigenschaften und -methoden, die nur wenige Leute kennen, wie zum Beispiel:

  • require(): Laden eines externen Moduls

  • require.resolve(): Lösen Sie den Modulnamen basierend auf seinem absoluten Pfad auf

  • require.main: Hauptmodule

  • require.cache: Alle Cache-Module

  • require.extensions: Dateibasierte Erweiterungen für Kompilierungsmethoden verfügbar.

Sobald „require“ fertig ist, wird der gesamte Quellcode in eine neue Funktion verpackt, die das „require“-Modul und andere exponierte Variablen als Parameter übernimmt. Dadurch entsteht ein neuer Funktionsumfang des Moduls, sodass keine Verschmutzung entsteht Rest der Node.js-Umgebung.

(function (exports, require, module, __filename, __dirname) { 
  // YOUR CODE INJECTED HERE! 你的代码在这里
});
Nach dem Login kopieren

Schließlich wird die Funktion, die das Modul umschließt, ausgeführt und die gesamte Module._compile-Methode wird synchron ausgeführt, sodass der ursprüngliche Aufruf der Module._load-Methode auf die Ausführung dieses Codes wartet, bevor er abgeschlossen wird und das Modul zurückgibt .exportiert an den Benutzer.

Jetzt wissen wir bereits, wie require('module') das von Ihnen definierte Modul über das Modulsystem lädt. Der Quellcode von module.js enthält weitere Codeprinzipien. Bei Interesse können Sie mehr darüber erfahren.

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmierunterricht! !

Das obige ist der detaillierte Inhalt vonEine kurze Diskussion über das Funktionsprinzip von require() in Node.js. 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

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

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)

Ein Artikel über Speichersteuerung in Node Ein Artikel über Speichersteuerung in Node Apr 26, 2023 pm 05:37 PM

Der nicht blockierende und ereignisgesteuerte Knotendienst hat den Vorteil eines geringen Speicherverbrauchs und eignet sich sehr gut für die Verarbeitung massiver Netzwerkanforderungen. Unter der Voraussetzung massiver Anfragen müssen Probleme im Zusammenhang mit der „Speicherkontrolle“ berücksichtigt werden. 1. Der Garbage-Collection-Mechanismus und die Speicherbeschränkungen von V8 Js wird von der Garbage-Collection-Maschine gesteuert

Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Detaillierte grafische Erläuterung des Speichers und des GC der Node V8-Engine Mar 29, 2023 pm 06:02 PM

Dieser Artikel vermittelt Ihnen ein detailliertes Verständnis des Speichers und Garbage Collectors (GC) der NodeJS V8-Engine. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Lassen Sie uns darüber sprechen, wie Sie das beste Node.js-Docker-Image auswählen. Dec 13, 2022 pm 08:00 PM

Die Auswahl eines Docker-Images für Node mag trivial erscheinen, aber die Größe und potenziellen Schwachstellen des Images können erhebliche Auswirkungen auf Ihren CI/CD-Prozess und Ihre Sicherheit haben. Wie wählen wir also das beste Node.js-Docker-Image aus?

Lassen Sie uns ausführlich über das File-Modul in Node sprechen Lassen Sie uns ausführlich über das File-Modul in Node sprechen Apr 24, 2023 pm 05:49 PM

Das Dateimodul ist eine Kapselung der zugrunde liegenden Dateioperationen, wie z. B. Lesen/Schreiben/Öffnen/Schließen/Löschen von Dateien, Hinzufügen usw. Das größte Merkmal des Dateimoduls besteht darin, dass alle Methoden zwei Versionen von **synchronem** und **bereitstellen. asynchron**, mit Methoden mit dem Suffix sync sind alle Synchronisationsmethoden, und diejenigen ohne sind alle heterogene Methoden.

Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Node.js 19 ist offiziell veröffentlicht, lassen Sie uns über seine 6 Hauptfunktionen sprechen! Nov 16, 2022 pm 08:34 PM

Node 19 wurde offiziell veröffentlicht. Dieser Artikel wird Ihnen eine detaillierte Erklärung der 6 Hauptfunktionen von Node.js 19 geben. Ich hoffe, er wird Ihnen hilfreich sein!

Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Lassen Sie uns über den GC-Mechanismus (Garbage Collection) in Node.js sprechen Nov 29, 2022 pm 08:44 PM

Wie führt Node.js GC (Garbage Collection) durch? Der folgende Artikel führt Sie durch.

Lassen Sie uns über die Ereignisschleife in Node sprechen Lassen Sie uns über die Ereignisschleife in Node sprechen Apr 11, 2023 pm 07:08 PM

Die Ereignisschleife ist ein grundlegender Bestandteil von Node.js und ermöglicht die asynchrone Programmierung, indem sie sicherstellt, dass der Hauptthread nicht blockiert wird. Das Verständnis der Ereignisschleife ist für die Erstellung effizienter Anwendungen von entscheidender Bedeutung. Der folgende Artikel wird Ihnen ein detailliertes Verständnis der Ereignisschleife in Node vermitteln. Ich hoffe, er wird Ihnen hilfreich sein!

Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Was soll ich tun, wenn der Knoten den Befehl npm nicht verwenden kann? Feb 08, 2023 am 10:09 AM

Der Grund, warum der Knoten den Befehl npm nicht verwenden kann, liegt darin, dass die Umgebungsvariablen nicht richtig konfiguriert sind. Die Lösung ist: 1. Öffnen Sie „Systemeigenschaften“ 2. Suchen Sie nach „Umgebungsvariablen“ -> „Systemvariablen“ und bearbeiten Sie dann die Umgebung Variablen; 3. Suchen Sie den Speicherort des NodeJS-Ordners. 4. Klicken Sie auf „OK“.

See all articles