Trabalhando com YAML em Node.js: bibliotecas js-yaml e yaml

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Trabalhando com YAML em JavaScript (Node.js)



YAML (YAML Ain't Markup Language) é um formato de serialização de dados legível por humanos, frequentemente usado para arquivos de configuração (por exemplo, em Docker Compose, Kubernetes, Ansible). No ecossistema Node.js, existem duas principais bibliotecas para trabalhar com YAML: js-yaml (a mais popular) e yaml (moderna, com suporte a streams).



Neste artigo, veremos ambas as bibliotecas, aprenderemos a fazer parsing de YAML para objetos JavaScript, serializar objetos de volta para YAML, além de tratar erros e trabalhar com arquivos.



Instalação das bibliotecas



Para começar, instale uma das bibliotecas via npm:



# Instalação do js-yaml (recomendado para a maioria dos projetos)npm install js-yaml

# Instalação da biblioteca mais moderna yamlnpm install yaml


Biblioteca js-yaml



js-yaml é a biblioteca mais madura e amplamente utilizada para trabalhar com YAML em Node.js. Ela suporta a especificação completa do YAML 1.2, incluindo tipos de dados complexos, tags e esquemas personalizados.



Parsing de string 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('Erro ao fazer parsing do YAML:', e.message);}


Parsing de arquivo 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('Erro ao ler arquivo:', e.message);}


Serialização para 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, // indentação de 2 espaços lineWidth: 80, // comprimento máximo da linha noRefs: true, // não usar referências sortKeys: true // ordenar chaves});

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


Trabalhando com tipos personalizados



js-yaml suporta tags YAML personalizadas para processar tipos de dados especiais:



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

// Criando um tipo personalizado para dataconst 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]});

// Criando um esquema com o 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 é uma biblioteca mais moderna que oferece parsing por stream e melhor suporte a Unicode. Ela também implementa a especificação YAML 1.2.



Parsing básico



const YAML = require('yaml');

const doc = YAML.parse(`person: name: Ivan age: 30 hobbies: - programação - leitura`);

console.log(doc.person.name); // "Ivan"console.log(doc.person.hobbies[0]); // "programação"

Recommendations