Arbeit mit YAML in JavaScript (Node.js)
YAML (YAML Ain't Markup Language) ist ein menschenlesbares Daten-Serialisierungsformat, das häufig für Konfigurationsdateien verwendet wird (z. B. in Docker Compose, Kubernetes, Ansible). Im Node.js-Ökosystem gibt es zwei Hauptbibliotheken für die Arbeit mit YAML: js-yaml (die beliebteste) und yaml (modern, mit Unterstützung für Streams).
In diesem Artikel werden wir beide Bibliotheken betrachten, lernen, YAML in JavaScript-Objekte zu parsen, Objekte zurück in YAML zu serialisieren sowie Fehler zu behandeln und mit Dateien zu arbeiten.
Installation der Bibliotheken
Installieren Sie zunächst eine der Bibliotheken über npm:
# Installation von js-yaml (empfohlen für die meisten Projekte)npm install js-yaml
# Installation der moderneren Bibliothek yamlnpm install yamlBibliothek js-yaml
js-yaml ist die ausgereifteste und am weitesten verbreitete Bibliothek für die Arbeit mit YAML in Node.js. Sie unterstützt die vollständige YAML 1.2-Spezifikation, einschließlich komplexer Datentypen, Tags und benutzerdefinierter Schemata.
Parsen eines YAML-Strings
const yaml = require('js-yaml');
const yamlString = `server: host: localhost port: 8080 ssl: truedatabase: driver: postgresql host: db.example.com port: 5432 credentials: user: admin password: secret`;
try { const data = yaml.load(yamlString); console.log(data.server.host); // "localhost" console.log(data.database.credentials.user); // "admin"} catch (e) { console.error('Fehler beim Parsen von YAML:', e.message);}Parsen einer YAML-Datei
const fs = require('fs');const yaml = require('js-yaml');
try { const fileContents = fs.readFileSync('./config.yaml', 'utf8'); const data = yaml.load(fileContents); console.log(data);} catch (e) { console.error('Fehler beim Lesen der Datei:', e.message);}Serialisierung in YAML
const yaml = require('js-yaml');
const config = { app: { name: "MyApp", version: "1.0.0" }, features: { logging: true, cache: { ttl: 3600, type: "redis" } }};
const yamlString = yaml.dump(config, { indent: 2, // Einzug von 2 Leerzeichen lineWidth: 80, // maximale Zeilenlänge noRefs: true, // keine Referenzen verwenden sortKeys: true // Schlüssel sortieren});
console.log(yamlString);// Ausgabe:// app:// name: MyApp// version: 1.0.0// features:// cache:// ttl: 3600// type: redis// logging: trueArbeit mit benutzerdefinierten Typen
js-yaml unterstützt benutzerdefinierte YAML-Tags zur Verarbeitung spezieller Datentypen:
const yaml = require('js-yaml');
// Erstellen eines benutzerdefinierten Typs für Datumconst DateType = new yaml.Type('!date', { kind: 'scalar', resolve: (data) => data.match(/^\\d{4}-\\d{2}-\\d{2}$/), construct: (data) => new Date(data), instanceOf: Date, represent: (date) => date.toISOString().split('T')[0]});
// Erstellen eines Schemas mit benutzerdefiniertem Typconst CUSTOM_SCHEMA = yaml.DEFAULT_SCHEMA.extend([DateType]);
const yamlString = `event: !date 2025-12-31name: "New Year Party"`;
const data = yaml.load(yamlString, { schema: CUSTOM_SCHEMA });console.log(data.event instanceof Date); // trueconsole.log(data.event.getFullYear()); // 2025Bibliothek yaml
yaml ist eine modernere Bibliothek, die Streaming-Parsing und bessere Unicode-Unterstützung bietet. Sie implementiert ebenfalls die YAML 1.2-Spezifikation.
Basis-Parsing
const YAML = require('yaml');
const doc = YAML.parse(`person: name: Ivan age: 30 hobbies: - Programmieren - Lesen`);
console.log(doc.person.name); // "Ivan"console.log(doc.person.hobbies[0]); // "Programmieren"