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 yamlBiblioteca 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: trueTrabajo 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()); // 2025Biblioteca 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" También en la biblioteca
gRPC para Swift (iOS/macOS): bibliotecas, configuración y ejemplos
Trabajo con Markdown en C++: bibliotecas md4c, cmark y cpp-markdown
Generación de informes PDF en Go (Golang): bibliotecas y ejemplos
Configuración de aplicaciones C# (.NET): Microsoft.Extensions.Configuration
ts-node-dev para TypeScript: guía completa con ejemplos