Trabajo con YAML en Node.js: bibliotecas js-yaml y yaml

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)



YAML (YAML Ain't Markup Language) es un formato de serialización de datos legible por humanos que se utiliza a menudo para archivos de configuración (por ejemplo, en Docker Compose, Kubernetes, Ansible). En el ecosistema Node.js, existen dos bibliotecas principales para trabajar con YAML: js-yaml (la más popular) y yaml (moderna, con soporte para flujos).



En este artículo, revisaremos ambas bibliotecas, aprenderemos a analizar YAML en objetos de JavaScript, serializar objetos de vuelta a YAML, así como manejar errores y trabajar con archivos.



Instalación de las bibliotecas



Para empezar, instale una de las bibliotecas a través de npm:



# Instalación de js-yaml (recomendada para la mayoría de proyectos)npm install js-yaml

# Instalación de la biblioteca más moderna yamlnpm install yaml


Biblioteca js-yaml



js-yaml es la biblioteca más madura y ampliamente utilizada para trabajar con YAML en Node.js. Soporta la especificación completa de YAML 1.2, incluyendo tipos de datos complejos, etiquetas y esquemas personalizados.



Análisis de una cadena YAML



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('Error al analizar YAML:', e.message);}


Análisis de un archivo YAML



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('Error al leer el archivo:', e.message);}


Serialización a 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, // sangría de 2 espacios lineWidth: 80, // longitud máxima de línea noRefs: true, // no usar referencias sortKeys: true // ordenar claves});

console.log(yamlString);// Salida:// app:// name: MyApp// version: 1.0.0// features:// cache:// ttl: 3600// type: redis// logging: true


Trabajo con tipos personalizados



js-yaml soporta etiquetas YAML personalizadas para manejar tipos de datos especiales:



const yaml = require('js-yaml');

// Creamos un tipo personalizado para fechaconst 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]});

// Creamos un esquema con el tipo personalizadoconst 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()); // 2025


Biblioteca yaml



yaml es una biblioteca más moderna que ofrece análisis por flujo y mejor soporte para Unicode. También implementa la especificación YAML 1.2.



Análisis básico



const YAML = require('yaml');

const doc = YAML.parse(`person: name: Iván age: 30 hobbies: - programación - lectura`);

console.log(doc.person.name); // "Iván"console.log(doc.person.hobbies[0]); // "programación"

Recommendations