mitmario.dev

Synthese: ein Paket im Einsatz

Node.js Sandbox 3 Min Lesezeit 2 BeispieleLektion 6 von 7

Das ist die Synthese von Abschnitt 5. Alle Teile waren schon da, jetzt kommen sie in eine Reihenfolge.

Die Reihenfolge am Stück

Projekt anlegen. npm init -y erzeugt die package.json.

type setzen. "type": "module", damit deine .js-Dateien ESM sind. Ohne diesen Eintrag rät Node bei jedem Start und schreibt eine Warnung.

Paket auswählen. Die zwei Minuten aus Lektion 5.5: Wie alt, wie gepflegt, wie viele Abhängigkeiten, heißt es wirklich so.

Installieren. npm install slugify schreibt den Eintrag in dependencies und legt das Lockfile an.

Importieren und benutzen. Und dabei in die Dokumentation schauen, sonst wird aus Köln ein Koln.

Startbefehl eintragen. "start": "node index.js" in den scripts-Block.

Ein Projekt in der richtigen Reihenfolge
import slugify from "slugify";
import { readFile } from "node:fs/promises";

const eintraege = JSON.parse(await readFile("titel.json", "utf8"));

for (const eintrag of eintraege) {
  console.log(`${eintrag} -> ${slugify(eintrag, { lower: true, locale: "de" })}`);
}

console.log(`${eintraege.length} Einträge verarbeitet`);

Das ist ein vollständiges kleines Projekt, und du kannst es wie eines bedienen. Starte die Sandbox, hol dieses Beispiel nach vorn und tipp im Terminal npm start. Npm schreibt dir erst, was es ausführt (> node index.js), und danach kommt die Ausgabe deines Programms. Genau diesen Weg nimmt später jeder, der dein Projekt bekommt, ohne dass er deinen Dateinamen kennen muss.

Warum der Startbefehl zuletzt kommt

Der Startbefehl steht am Ende der Liste, und das ist kein Zufall.

Solange du entwickelst, tippst du node index.js sowieso von Hand, und der Befehl ändert sich vielleicht noch. Vielleicht kommt eine Option dazu, vielleicht heißt die Datei am Ende anders.

Der scripts-Eintrag ist eine Zusage an andere: Wer npm start tippt, bekommt das laufende Programm. Diese Zusage gibst du sinnvollerweise erst ab, wenn du weißt, was der richtige Befehl ist. Ein start, das nicht startet, ist schlimmer als gar keins, denn niemand rechnet damit.

Ein Paket wieder loswerden

Jetzt der Teil, an den beim Installieren niemand denkt.

Ein Paket herauszunehmen ist einfach, solange du es an einer Stelle benutzt. Du ersetzt diese eine Stelle und deinstallierst.

An zwanzig Stellen ist es keine Änderung mehr, sondern ein Projekt. Und genau das passiert, wenn ein Paket praktisch ist: Es wandert nach und nach überallhin.

Gründe, warum du ein Paket loswerden willst, gibt es genug. Es wird nicht mehr gepflegt. Es hat eine Sicherheitslücke, die niemand schließt. Es hat in Version 3 alles umgebaut. Oder Node kann es inzwischen selbst, so wie bei fetch und bei --env-file.

Das Paket hinter einer eigenen Datei
import { readFile } from "node:fs/promises";
import { kurzform } from "./lib/kurzform.js";

const eintraege = JSON.parse(await readFile("titel.json", "utf8"));

for (const eintrag of eintraege) {
  console.log(`${eintrag} -> ${kurzform(eintrag)}`);
}

console.log(`${eintraege.length} Einträge verarbeitet`);

Hier steht zwischen dem Paket und dem restlichen Code eine kleine eigene Datei. index.js importiert nicht mehr slugify, sondern kurzform.

Am Ergebnis ändert das nichts, das Beispiel darüber und dieses hier liefern Zeichen für Zeichen dasselbe. Das kannst du nachsehen: Beide laufen, wechsel einmal zwischen ihnen hin und her und vergleiche die drei Zeilen im Terminal. Der Unterschied liegt woanders:

Die Optionen stehen jetzt an einer Stelle. Vorher hätte jeder weitere Aufruf { lower: true, locale: "de" } wiederholen müssen, und beim dritten hätte jemand die locale vergessen.

Der Austausch kostet eine Datei. Wenn slugify morgen wegfällt, änderst du lib/kurzform.js und sonst nichts.

Der Name passt zu deinem Projekt. kurzform sagt, was es in deinem Zusammenhang tut.

Das lohnt sich nicht bei jedem Paket. Bei einem, das an vielen Stellen vorkommt, und bei einem, dessen Aufruf du dir merken müsstest, lohnt es sich fast immer. Systematisch baut Abschnitt 18 diese Trennung aus, dort heißt sie dann Projektstruktur.

Zum Mitnehmen

Ein Paket an einer Stelle zu benutzen ist leicht rückgängig zu machen. An zwanzig Stellen nicht mehr.

Jetzt du

Basis Konto, kostenlos

Zu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.

Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.

In diesem Kurs läuft dein Code auf einem Server. Dafür hat das Basis Konto 1 Stunde im Monat, mehr Zeit gibt es mit dem Premium Konto.

Was in dieser Lektion steckt

  • Artikel mit 2 Beispielen zum Ausprobieren

    Steht hier, ohne Konto lesbar.

  • Aufgabe, dein Code läuft auf einem Server

    Öffnet sich mit dem Basis Konto.