Trabajo con YAML en JavaScript (Node.js): análisis, generación y validación

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

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-yaml


Despué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: 5432


Pará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 referencias
  • skipInvalid — 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

Recommendations