Arbeiten mit YAML in JavaScript (Node.js): Parsing, Generierung und Validierung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Arbeiten mit YAML in JavaScript (Node.js): vollständige Anleitung

\n\n

YAML (YAML Ain't Markup Language) ist ein menschenlesbares Daten-Serialisierungsformat, das häufig für Konfigurationsdateien, API-Beschreibungen, CI/CD-Pipelines und Datenaustausch verwendet wird. Im Node.js-Ökosystem gibt es mehrere leistungsstarke Bibliotheken für die Arbeit mit YAML. In diesem Artikel werden wir die wichtigsten Werkzeuge, ihre Funktionen und Anwendungsbeispiele im Detail besprechen.

\n\n

Beliebte Bibliotheken für YAML in Node.js

\n\n

Die gängigsten Bibliotheken für die Arbeit mit YAML in der Node.js-Umgebung:

\n\n
    \n
  • js-yaml — die beliebteste und aktiv gepflegte Bibliothek. Unterstützt das gesamte Spektrum an Operationen: Parsing, Serialisierung, benutzerdefinierte Schemata und Typen.
  • \n
  • yaml (Paket yaml) — eine moderne Alternative mit Unterstützung für striktes Parsing, Kommentare und AST (Abstrakter Syntaxbaum).
  • \n
  • yamljs — eine leichtgewichtige Bibliothek mit einfacher API, geeignet für grundlegende Aufgaben.
  • \n
\n\n

Installation der Bibliothek js-yaml

\n\n

Um mit YAML in Node.js zu beginnen, installieren Sie die Bibliothek über npm:

\n\n
npm install js-yaml
\n\n

Nach der Installation importieren Sie die Bibliothek in Ihr Projekt:

\n\n
const yaml = require('js-yaml');\nconst fs = require('fs');
\n\n

Parsing von YAML in ein JavaScript-Objekt

\n\n

Die grundlegende Operation ist die Umwandlung eines YAML-Strings in ein JavaScript-Objekt:

\n\n
const yamlString = `\nserver:\n  host: localhost\n  port: 8080\n  ssl: true\ndatabases:\n  - name: users\n    type: postgres\n  - name: logs\n    type: mongodb\n`;\n\ntry {\n  const data = yaml.load(yamlString);\n  console.log(data.server.host); // "localhost"\n  console.log(data.databases[0].name); // "users"\n} catch (e) {\n  console.error('YAML-Parsing-Fehler:', e.message);\n}
\n\n

Die Methode yaml.load() wandelt einen YAML-String sicher in ein Objekt um. Zum Laden aus einer Datei verwenden Sie:

\n\n
try {\n  const config = yaml.load(fs.readFileSync('config.yaml', 'utf8'));\n  console.log(config);\n} catch (e) {\n  console.error('Fehler beim Lesen der Konfiguration:', e);\n}
\n\n

Serialisierung eines JavaScript-Objekts in YAML

\n\n

Die umgekehrte Operation — Umwandlung eines Objekts in einen YAML-String:

\n\n
const configObject = {\n  app: {\n    name: "MyApp",\n    version: "1.0.0"\n  },\n  features: ["auth", "logging", "analytics"],\n  database: {\n    host: "db.example.com",\n    port: 5432\n  }\n};\n\nconst yamlString = yaml.dump(configObject, {\n  indent: 2,\n  lineWidth: 120,\n  noRefs: true\n});\n\nconsole.log(yamlString);\n// Ausgabe:\n// app:\n//   name: MyApp\n//   version: 1.0.0\n// features:\n//   - auth\n//   - logging\n//   - analytics\n// database:\n//   host: db.example.com\n//   port: 5432
\n\n

Parameter der Methode yaml.dump():

\n
    \n
  • indent — Anzahl der Leerzeichen für Einrückungen (Standard: 2)
  • \n
  • lineWidth — maximale Zeilenlänge (Standard: 80)
  • \n
  • noRefs — Deaktivierung der Verwendung von Ankern und Referenzen
  • \n
  • skipInvalid — Überspringen ungültiger Werte anstatt einen Fehler auszulösen
  • \n
\n\n

Arbeiten mit benutzerdefinierten YAML-Typen

\n\n

js-yaml unterstützt benutzerdefinierte Schemata und Datentypen. Beispielsweise kann die Unterstützung für Daten hinzugefügt werden:

\n\n
const yaml = require('js-yaml');\n\n// Erstellen eines benutzerdefinierten Schemas mit Datenunterstützung\nconst schema = yaml.DEFAULT_SCHEMA.extend([\n  new yaml.Type('tag:yaml.org,2002:timestamp', {\n    kind: 'scalar',\n    resolve: (data) => {\n      return !isNaN(Date.parse(data));\n    },\n    construct: (data) => {\n      return new Date(data);\n    },\n    instanceOf: Date,\n    represent: (date) => {\n      return date.toISOString();\n    }\n  })\n]);\n\nconst yamlString = 'event_date: 2024-03-15T14:30:00Z';\nconst parsed = yaml.load(yamlString, { schema });\nconsole.log(parsed.event_date inst                    

Empfehlungen