Der Autor hat den Open Internet/Free Speech Fund ausgewählt, um eine Spende im Rahmen des Write for DOnations-Programms zu erhalten.
Einführung
In Node.js ist ein Modul eine Sammlung von JavaScript-Funktionen und -Objekten, die von externen Anwendungen verwendet werden können. Die Beschreibung eines Codes als Modul bezieht sich weniger darauf, was der Code ist, sondern vielmehr darauf, was er tut – jede Node.js-Datei oder Sammlung von Dateien kann als Modul betrachtet werden, wenn ihre Funktionen und Daten für externe Programme nutzbar gemacht werden.
Da Module Funktionseinheiten bereitstellen, die in vielen größeren Programmen wiederverwendet werden können, ermöglichen sie es Ihnen, lose gekoppelte Anwendungen zu erstellen, die mit der Komplexität skalieren, und öffnen Ihnen die Tür, um Ihren Code mit anderen Entwicklern zu teilen. Wenn Sie in der Lage sind, Module zu schreiben, die nützliche Funktionen und Daten exportieren, können Sie zur breiteren Node.js-Community beitragen – tatsächlich wurden alle Pakete, die Sie auf npm verwenden, als Module gebündelt und freigegeben. Das macht das Erstellen von Modulen zu einer wesentlichen Fähigkeit für einen Node.js-Entwickler.
In diesem Tutorial werden Sie ein Node.js-Modul erstellen, das Webentwicklern vorschlägt, welche Farbe sie in ihren Designs verwenden sollten. Sie werden das Modul entwickeln, indem Sie die Farben in einem Array speichern und eine Funktion bereitstellen, die eine Farbe zufällig abruft. Anschließend werden Sie verschiedene Möglichkeiten durchspielen, ein Modul in eine Node.js-Anwendung zu importieren.
Voraussetzungen
- Sie benötigen Node.js und npm in Ihrer Entwicklungsumgebung installiert. Dieses Tutorial verwendet die Version 10.17.0. Um diese auf macOS oder Ubuntu 18.04 zu installieren, folgen Sie den Schritten in Wie man Node.js installiert und eine lokale Entwicklungsumgebung auf macOS erstellt oder dem Abschnitt Installation mit einem PPA in Wie man Node.js auf Ubuntu 18.04 installiert. Wenn Sie Node.js installiert haben, haben Sie auch npm installiert; dieses Tutorial verwendet Version 6.11.3.
- Sie sollten auch mit der Datei
package.json
vertraut sein, und Erfahrung mit npm-Befehlen wäre ebenfalls nützlich. Um diese Erfahrung zu sammeln, folgen Sie How To Use Node.js Modules with npm and package.json, insbesondere Schritt 1 – Creating apackage.json
File. - Es ist auch hilfreich, mit der Node.js REPL (Read-Evaluate-Print-Loop) vertraut zu sein. Sie werden dies verwenden, um Ihr Modul zu testen. Wenn Sie weitere Informationen dazu benötigen, lesen Sie unsere Anleitung zur Verwendung der Node.js REPL.
Schritt 1 – Erstellen eines Moduls
Dieser Schritt führt Sie durch die Erstellung Ihres ersten Node.js-Moduls. Ihr Modul wird eine Sammlung von Farben in einem Array enthalten und eine Funktion bereitstellen, um eine Farbe nach dem Zufallsprinzip zu erhalten. Sie werden die in Node.js eingebaute exports
-Eigenschaft verwenden, um die Funktion und das Array für externe Programme verfügbar zu machen.
Zunächst werden Sie entscheiden, welche Daten über Farben Sie in Ihrem Modul speichern wollen. Jede Farbe wird ein Objekt sein, das eine name
-Eigenschaft enthält, die Menschen leicht identifizieren können, und eine code
-Eigenschaft, die eine Zeichenkette mit einem HTML-Farbcode ist. HTML-Farbcodes sind sechsstellige hexadezimale Zahlen, mit denen Sie die Farbe von Elementen auf einer Webseite ändern können. Mehr über HTML-Farbcodes erfahren Sie in diesem Artikel HTML-Farbcodes und Namen.
Sie entscheiden dann, welche Farben Sie in Ihrem Modul unterstützen wollen. Ihr Modul wird ein Array namens allColors
enthalten, das sechs Farben enthält. Dein Modul wird auch eine Funktion namens getRandomColor()
enthalten, die zufällig eine Farbe aus deinem Array auswählt und sie zurückgibt.
Erstelle in deinem Terminal einen neuen Ordner namens colors
und verschiebe ihn:
- mkdir colors
- cd colors
Initialisiere npm, damit andere Programme dieses Modul später im Tutorial importieren können:
- npm init -y
Du hast das -y
-Flag verwendet, um die üblichen Aufforderungen zur Anpassung deines package.json
zu überspringen. Wäre dies ein Modul, das Sie bei npm veröffentlichen möchten, würden Sie alle diese Aufforderungen mit relevanten Daten beantworten, wie in How To Use Node.js Modules with npm and package.json.
In diesem Fall lautet Ihre Ausgabe:
Output{ "name": "colors", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": , "author": "", "license": "ISC"}
Nun öffnen Sie einen Kommandozeilen-Texteditor wie nano
und erstellen Sie eine neue Datei, die als Einstiegspunkt für Ihr Modul dient:
- nano index.js
Ihr Modul wird ein paar Dinge tun. Zunächst werden Sie eine Color
-Klasse definieren. Ihre Color
-Klasse wird mit ihrem Namen und HTML-Code instanziiert. Fügen Sie die folgenden Zeilen hinzu, um die Klasse zu erstellen:
class Color { constructor(name, code) { this.name = name; this.code = code; }}
Nun, da Sie Ihre Datenstruktur für Color
haben, fügen Sie einige Instanzen in Ihr Modul ein. Schreiben Sie das folgende hervorgehobene Array in Ihre Datei:
class Color { constructor(name, code) { this.name = name; this.code = code; }}const allColors = ;
Schließen Sie eine Funktion ein, die zufällig ein Element aus dem soeben erstellten allColors
-Array auswählt:
class Color { constructor(name, code) { this.name = name; this.code = code; }}const allColors = ;exports.getRandomColor = () => { return allColors;}exports.allColors = allColors;
Das Schlüsselwort exports
verweist auf ein globales Objekt, das in jedem Node.js-Modul verfügbar ist. Alle Funktionen und Objekte, die im exports
-Objekt eines Moduls gespeichert sind, werden sichtbar, wenn andere Node.js-Module es importieren. Die Funktion getRandomColor()
wurde z. B. direkt im exports
-Objekt erstellt. Anschließend haben Sie dem exports
-Objekt eine allColors
-Eigenschaft hinzugefügt, die auf das zuvor im Skript erstellte Array der lokalen Konstanten allColors
verweist.
Wenn andere Module dieses Modul importieren, werden sowohl allColors
als auch getRandomColor()
offengelegt und können verwendet werden.
Speichern Sie die Datei und beenden Sie sie.
So weit haben Sie ein Modul erstellt, das ein Array von Farben und eine Funktion enthält, die zufällig eine Farbe zurückgibt. Sie haben auch das Array und die Funktion exportiert, so dass externe Programme sie verwenden können. Im nächsten Schritt werden Sie Ihr Modul in anderen Anwendungen verwenden, um die Auswirkungen von export
zu demonstrieren.
Schritt 2 – Testen Ihres Moduls mit der REPL
Bevor Sie eine vollständige Anwendung erstellen, nehmen Sie sich einen Moment Zeit, um zu bestätigen, dass Ihr Modul funktioniert. In diesem Schritt werden Sie die REPL verwenden, um das colors
Modul zu laden. In der REPL rufen Sie die Funktion getRandomColor()
auf, um zu sehen, ob sie sich so verhält, wie Sie es erwarten.
Starten Sie die Node.js REPL im gleichen Ordner wie die index.js
Datei:
- node
Wenn die REPL gestartet ist, sehen Sie die >
Eingabeaufforderung. Dies bedeutet, dass Sie JavaScript-Code eingeben können, der sofort ausgewertet wird. Wenn Sie mehr darüber lesen möchten, folgen Sie unserem Leitfaden zur Verwendung der REPL.
Geben Sie zunächst Folgendes ein:
- colors = require('./index');
In diesem Befehl lädt require()
das Modul colors
an seinem Einstiegspunkt. Wenn Sie ENTER
drücken, erhalten Sie:
Output{ getRandomColor: , allColors: }
Das REPL zeigt uns den Wert von colors
, nämlich alle Funktionen und Objekte, die aus der Datei index.js
importiert wurden. Wenn Sie das Schlüsselwort require
verwenden, gibt Node.js alle Inhalte innerhalb des exports
-Objekts eines Moduls zurück.
Erinnern Sie sich, dass Sie getRandomColor()
und allColors
zu exports
im Modul colors
hinzugefügt haben. Aus diesem Grund sehen Sie beide in der REPL, wenn sie importiert werden.
Testen Sie an der Eingabeaufforderung die Funktion getRandomColor()
:
- colors.getRandomColor();
Sie werden mit einer zufälligen Farbe aufgefordert:
OutputColor { name: 'groovygray', code: '#D7DBDD' }
Da der Index zufällig ist, kann Ihre Ausgabe variieren. Nachdem Sie nun bestätigt haben, dass das Modul colors
funktioniert, beenden Sie die Node.js REPL:
- .exit
So kehren Sie zu Ihrer Terminal-Befehlszeile zurück.
Sie haben soeben bestätigt, dass Ihr Modul mit der REPL wie erwartet funktioniert. Als nächstes werden Sie dieselben Konzepte anwenden und Ihr Modul in eine Anwendung laden, wie Sie es in einem echten Projekt tun würden.
Schritt 3 – Speichern Ihres lokalen Moduls als Abhängigkeit
Beim Testen Ihres Moduls in der REPL haben Sie es mit einem relativen Pfad importiert. Das bedeutet, dass Sie die Position der index.js
-Datei in Bezug auf das Arbeitsverzeichnis verwendet haben, um den Inhalt zu erhalten. Auch wenn dies funktioniert, ist es in der Regel besser, Module über ihren Namen zu importieren, damit der Import nicht unterbrochen wird, wenn der Kontext geändert wird. In diesem Schritt installieren Sie das Modul colors
mit der npm-Funktion für lokale Module install
.
Legen Sie ein neues Node.js-Modul außerhalb des Ordners colors
an. Wechseln Sie zunächst in das vorherige Verzeichnis und erstellen Sie einen neuen Ordner:
- cd ..
- mkdir really-large-application
Gehen Sie nun in Ihr neues Projekt:
- cd really-large-application
Wie beim colors
-Modul initialisieren Sie Ihren Ordner mit npm:
- npm init -y
Das folgende package.json
wird erzeugt:
Output{ "name": "really-large-application", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": , "author": "", "license": "ISC"}
Installieren Sie nun Ihr colors
-Modul und verwenden Sie das --save
-Flag, damit es in Ihrer package.json
-Datei aufgenommen wird:
- npm install --save ../colors
Soeben haben Sie Ihr colors
-Modul im neuen Projekt installiert. Öffnen Sie die Datei package.json
, um die neue lokale Abhängigkeit zu sehen:
- nano package.json
Sie werden feststellen, dass die folgenden hervorgehobenen Zeilen hinzugefügt wurden:
{ "name": "really-large-application", "version": "1.0.0", "description": "", "main": "index.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": , "author": "", "license": "ISC", "dependencies": { "colors": "file:../colors" }}
Beenden Sie die Datei.
Das Modul colors
wurde in Ihr Verzeichnis node_modules
kopiert. Vergewissern Sie sich mit folgendem Befehl, dass es dort ist:
- ls node_modules
Dies ergibt folgende Ausgabe:
Outputcolors
Verwenden Sie Ihr installiertes lokales Modul in diesem neuen Programm. Öffnen Sie Ihren Texteditor erneut und erstellen Sie eine weitere JavaScript-Datei:
- nano index.js
Ihr Programm wird zunächst das Modul colors
importieren. Dann wählt es eine Farbe nach dem Zufallsprinzip aus, indem es die vom Modul bereitgestellte Funktion getRandomColor()
verwendet. Schließlich gibt es eine Meldung auf der Konsole aus, die dem Benutzer mitteilt, welche Farbe er verwenden soll.
Gebe den folgenden Code in index.js
ein:
const colors = require('colors');const chosenColor = colors.getRandomColor();console.log(`You should use ${chosenColor.name} on your website. It's HTML code is ${chosenColor.code}`);
Speichere und beende diese Datei.
Ihre Anwendung teilt dem Benutzer nun eine zufällige Farboption für eine Website-Komponente mit.
Starten Sie dieses Skript mit:
- node index.js
Ihre Ausgabe wird ähnlich sein wie:
OutputYou should use leafygreen on your website. It's HTML code is #48C9B0
Sie haben nun das Modul colors
erfolgreich installiert und können es wie jedes andere in Ihrem Projekt verwendete npm-Paket verwalten. Wenn Sie jedoch weitere Farben und Funktionen zu Ihrem lokalen colors
-Modul hinzugefügt haben, müssen Sie npm update
in Ihren Anwendungen ausführen, um die neuen Optionen nutzen zu können. Im nächsten Schritt werden Sie das lokale Modul colors
auf andere Weise verwenden und automatische Aktualisierungen erhalten, wenn sich der Code des Moduls ändert.
Schritt 4 – Verknüpfung eines lokalen Moduls
Wenn Ihr lokales Modul stark in der Entwicklung ist, kann die ständige Aktualisierung der Pakete mühsam sein. Eine Alternative wäre, die Module zu verlinken. Durch die Verknüpfung eines Moduls wird sichergestellt, dass alle Aktualisierungen des Moduls sofort in den Anwendungen, die es verwenden, berücksichtigt werden.
In diesem Schritt werden Sie das Modul colors
mit Ihrer Anwendung verknüpfen. Sie werden auch das colors
-Modul modifizieren und bestätigen, dass seine neuesten Änderungen in der Anwendung funktionieren, ohne dass eine Neuinstallation oder ein Upgrade erforderlich ist.
Deinstallieren Sie zunächst Ihr lokales Modul:
- npm un colors
npm verknüpft Module mit symbolischen Links (oder Symlinks), die auf Dateien oder Verzeichnisse auf Ihrem Computer verweisen. Das Verlinken eines Moduls erfolgt in zwei Schritten:
- Erstellen eines globalen Links zum Modul. npm erstellt einen Symlink zwischen Ihrem globalen
node_modules
Verzeichnis und dem Verzeichnis Ihres Moduls. Das globalenode_modules
-Verzeichnis ist der Ort, an dem alle Ihre systemweiten npm-Pakete installiert sind (alle Pakete, die Sie mit dem-g
-Flag installieren). - Erstellen eines lokalen Links. npm erstellt einen Symlink zwischen Ihrem lokalen Projekt, das das Modul verwendet, und dem globalen Link des Moduls.
Erstellen Sie zunächst den globalen Link, indem Sie in den Ordner colors
zurückkehren und den Befehl link
verwenden:
- cd ../colors
- sudo npm link
Nach der Fertigstellung gibt Ihre Shell Folgendes aus:
Output/usr/local/lib/node_modules/colors -> /home/sammy/colors
Sie haben soeben einen Symlink in Ihrem Ordner node_modules
zu Ihrem Verzeichnis colors
erstellt.
Kehren Sie zum Ordner really-large-application
zurück und verlinken Sie das Paket:
- cd ../really-large-application
- sudo npm link colors
Sie erhalten eine Ausgabe ähnlich der folgenden:
Output/home/sammy/really-large-application/node_modules/colors -> /usr/local/lib/node_modules/colors -> /home/sammy/colors
Hinweis: Wenn Sie etwas weniger tippen möchten, können Sie ln
anstelle von link
verwenden. npm ln colors
hätte zum Beispiel genauso funktioniert.
Wie die Ausgabe zeigt, haben Sie gerade einen Symlink vom lokalen node_modules
-Verzeichnis Ihres really-large-application
auf den Symlink colors
in Ihrem globalen node_modules
erstellt, der auf das tatsächliche Verzeichnis mit dem colors
-Modul verweist.
Der Linking-Prozess ist abgeschlossen. Führen Sie Ihre Datei aus, um sicherzustellen, dass sie noch funktioniert:
- node index.js
Ihre Ausgabe wird in etwa so aussehen:
OutputYou should use sunkissedyellow on your website. It's HTML code is #F4D03F
Ihre Programmfunktionalität ist intakt. Testen Sie als nächstes, ob die Aktualisierungen sofort übernommen werden. Öffnen Sie in Ihrem Texteditor erneut die Datei index.js
im Modul colors
:
- cd ../colors
- nano index.js
Fügen Sie nun eine Funktion hinzu, die den besten existierenden Blauton auswählt. Sie benötigt keine Argumente und gibt immer das dritte Element des Arrays allColors
zurück. Füge diese Zeilen am Ende der Datei hinzu:
class Color { constructor(name, code) { this.name = name; this.code = code; }}const allColors = ;exports.getRandomColor = () => { return allColors; }exports.allColors = allColors;exports.getBlue = () => { return allColors;}
Speichere und beende die Datei und öffne dann die Datei index.js
im Ordner really-large-application
erneut:
- cd ../really-large-application
- nano index.js
Rufe die neu erstellte Funktion getBlue()
auf und gib einen Satz mit den Eigenschaften der Farbe aus. Fügen Sie diese Anweisungen am Ende der Datei hinzu:
const colors = require('colors');const chosenColor = colors.getRandomColor();console.log(`You should use ${chosenColor.name} on your website. It's HTML code is ${chosenColor.code}`);const favoriteColor = colors.getBlue();console.log(`My favorite color is ${favoriteColor.name}/${favoriteColor.code}, btw`);
Speichern Sie die Datei und beenden Sie sie.
Der Code verwendet nun die neu erstellte Funktion getBlue()
. Führen Sie die Datei wie zuvor aus:
- node index.js
Sie erhalten eine Ausgabe wie:
OutputYou should use brightred on your website. It's HTML code is #E74C3CMy favorite color is skyblue/#5DADE2, btw
Ihr Skript war in der Lage, die neueste Funktion in Ihrem colors
-Modul zu verwenden, ohne npm update
ausführen zu müssen. Dadurch wird es einfacher, in der Entwicklung Änderungen an dieser Anwendung vorzunehmen.
Wenn Sie größere und komplexere Anwendungen schreiben, überlegen Sie, wie zusammengehöriger Code in Modulen gruppiert werden kann und wie diese Module aufgebaut sein sollen. Wenn Ihr Modul nur von einem Programm verwendet werden soll, kann es innerhalb desselben Projekts verbleiben und durch einen relativen Pfad referenziert werden. Wenn Ihr Modul später separat genutzt werden soll oder sich an einem ganz anderen Ort als das Projekt befindet, an dem Sie gerade arbeiten, ist eine Installation oder Verknüpfung möglicherweise sinnvoller. Module, die sich in aktiver Entwicklung befinden, profitieren auch von den automatischen Aktualisierungen der Verknüpfung. Wenn das Modul nicht in aktiver Entwicklung ist, kann die Verwendung von npm install
die einfachere Option sein.
Abschluss
In diesem Tutorial haben Sie gelernt, dass ein Node.js-Modul eine JavaScript-Datei mit Funktionen und Objekten ist, die von anderen Programmen verwendet werden können. Anschließend haben Sie ein Modul erstellt und Ihre Funktionen und Objekte an das globale exports
-Objekt angehängt, um sie für externe Programme verfügbar zu machen. Schließlich haben Sie dieses Modul in ein Programm importiert und damit gezeigt, wie Module zu größeren Anwendungen zusammengefügt werden.
Nachdem Sie nun wissen, wie man Module erstellt, denken Sie über die Art des Programms nach, das Sie schreiben wollen, und unterteilen Sie es in verschiedene Komponenten, wobei Sie jeden einzelnen Satz von Aktivitäten und Daten in eigenen Modulen unterbringen. Je mehr Übung Sie beim Schreiben von Modulen bekommen, desto besser werden Sie in der Lage sein, auf Ihrer Lernreise qualitativ hochwertige Node.js-Programme zu schreiben. Ein Beispiel für eine Node.js-Anwendung, die Module verwendet, finden Sie in unserem Tutorial How To Set Up a Node.js Application for Production on Ubuntu 18.04.