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
E-Mail-Versand mit TypeScript: Bibliotheken und Codebeispiele
Aufgabenwarteschlangen in Node.js: Bull, Bee-Queue und Kue
Datenbankmigrationen in Node.js: Sequelize, Knex und TypeORM
E-Mail-Versand mit Kotlin: Bibliotheken, Beispiele und SMTP-Konfiguration
Arbeiten mit Bildern in Rust: Überblick über die Bibliotheken image, fast_image_resize und andere