Arbeiten mit YAML in JavaScript (Node.js): vollständige Anleitung
\n\nYAML (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\nBeliebte Bibliotheken für YAML in Node.js
\n\nDie 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
Installation der Bibliothek js-yaml
\n\nUm mit YAML in Node.js zu beginnen, installieren Sie die Bibliothek über npm:
\n\nnpm install js-yaml\n\nNach der Installation importieren Sie die Bibliothek in Ihr Projekt:
\n\nconst yaml = require('js-yaml');\nconst fs = require('fs');\n\nParsing von YAML in ein JavaScript-Objekt
\n\nDie grundlegende Operation ist die Umwandlung eines YAML-Strings in ein JavaScript-Objekt:
\n\nconst 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\nDie Methode yaml.load() wandelt einen YAML-String sicher in ein Objekt um. Zum Laden aus einer Datei verwenden Sie:
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\nSerialisierung eines JavaScript-Objekts in YAML
\n\nDie umgekehrte Operation — Umwandlung eines Objekts in einen YAML-String:
\n\nconst 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\nParameter der Methode yaml.dump():
- \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
Arbeiten mit benutzerdefinierten YAML-Typen
\n\njs-yaml unterstützt benutzerdefinierte Schemata und Datentypen. Beispielsweise kann die Unterstützung für Daten hinzugefügt werden:
\n\nconst 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 Auch in der Bibliothek
Kryptographie in Java: Verschlüsselung und Hashing von Daten
Arbeiten mit Excel in PHP: Bibliotheken PhpSpreadsheet und OpenSpout
Arbeit mit XML in Rust: Bibliotheken quick-xml, roxmltree und serde_xml_rs
Dokka für Kotlin: Das komplette Tutorial mit Praxisbeispielen
HTTP-Client für C++: Top-Bibliotheken für die Netzwerkarbeit