Trabajo con YAML en JavaScript (Node.js): guía completa
YAML (YAML Ain't Markup Language) es un formato de serialización de datos legible por humanos, ampliamente utilizado para archivos de configuración, descripción de APIs, pipelines de CI/CD e intercambio de datos. En el ecosistema de Node.js existen varias bibliotecas potentes para trabajar con YAML. En este artículo analizaremos en detalle las herramientas principales, sus capacidades y ejemplos de uso.
Bibliotecas populares para YAML en Node.js
Las bibliotecas más comunes para trabajar con YAML en el entorno Node.js:
- js-yaml — la biblioteca más popular y activamente mantenida. Soporta un conjunto completo de operaciones: análisis, serialización, esquemas y tipos personalizados.
- yaml (paquete yaml) — una alternativa moderna con soporte para análisis estricto, comentarios y AST (árbol de sintaxis abstracta).
- yamljs — una biblioteca ligera con una API simple, adecuada para tareas básicas.
Instalación de la biblioteca js-yaml
Para empezar a trabajar con YAML en Node.js, instale la biblioteca a través de npm:
npm install js-yamlDespués de la instalación, importe la biblioteca en su proyecto:
const yaml = require('js-yaml');const fs = require('fs');Análisis de YAML a objeto JavaScript
La operación principal es convertir una cadena YAML en un objeto JavaScript:
const yamlString = `server: host: localhost port: 8080 ssl: truedatabases: - name: users type: postgres - name: logs type: mongodb`;
try { const data = yaml.load(yamlString); console.log(data.server.host); // "localhost" console.log(data.databases[0].name); // "users"} catch (e) { console.error('Error al analizar YAML:', e.message);}El método yaml.load() convierte de forma segura una cadena YAML en un objeto. Para cargar desde un archivo, use:
try { const config = yaml.load(fs.readFileSync('config.yaml', 'utf8')); console.log(config);} catch (e) { console.error('Error al leer la configuración:', e);}Serialización de un objeto JavaScript a YAML
La operación inversa: convertir un objeto en una cadena YAML:
const configObject = { app: { name: "MyApp", version: "1.0.0" }, features: ["auth", "logging", "analytics"], database: { host: "db.example.com", port: 5432 }};
const yamlString = yaml.dump(configObject, { indent: 2, lineWidth: 120, noRefs: true});
console.log(yamlString);// Salida:// app:// name: MyApp// version: 1.0.0// features:// - auth// - logging// - analytics// database:// host: db.example.com// port: 5432Parámetros del método yaml.dump():
indent— número de espacios para la sangría (por defecto 2)lineWidth— longitud máxima de línea (por defecto 80)noRefs— deshabilitar el uso de anclas y referenciasskipInvalid— omitir valores no válidos en lugar de lanzar un error
Trabajo con tipos personalizados de YAML
js-yaml admite esquemas y tipos de datos personalizados. Por ejemplo, se puede agregar soporte para fechas:
const yaml = require('js-yaml');
// Creación de un esquema personalizado con soporte para fechasconst schema = yaml.DEFAULT_SCHEMA.extend([ new yaml.Type('tag:yaml.org,2002:timestamp', { kind: 'scalar', resolve: (data) => { return !isNaN(Date.parse(data)); }, construct: (data) => { return new Date(data); }, instanceOf: Date, represent: (date) => { return date.toISOString(); } })]);
const yamlString = 'event_date: 2024-03-15T14:30:00Z';const parsed = yaml.load(yamlString, { schema });console.log(parsed.event_date inst También en la biblioteca
Cliente OAuth para Swift (iOS/macOS): guía completa
node-cron: Programador de tareas para JavaScript (Node.js)
Boost.Filesystem para C++: guía completa con ejemplos prácticos
Generación de PDF en Java: resumen de las bibliotecas iText, Apache PDFBox, OpenPDF
Generación de Swagger/OpenAPI para Swift: herramientas y bibliotecas