Travailler avec YAML en JavaScript (Node.js) : parsing, génération et validation

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Travailler avec YAML en JavaScript (Node.js) : guide complet

\n\n

YAML (YAML Ain't Markup Language) est un format de sérialisation de données lisible par l'homme, largement utilisé pour les fichiers de configuration, la description d'API, les pipelines CI/CD et l'échange de données. Dans l'écosystème Node.js, il existe plusieurs bibliothèques puissantes pour travailler avec YAML. Dans cet article, nous allons détailler les principaux outils, leurs fonctionnalités et des exemples d'utilisation.

\n\n

Bibliothèques populaires pour YAML dans Node.js

\n\n

Les bibliothèques les plus courantes pour travailler avec YAML dans l'environnement Node.js :

\n\n
    \n
  • js-yaml — la bibliothèque la plus populaire et activement maintenue. Elle prend en charge l'ensemble des opérations : parsing, sérialisation, schémas et types personnalisés.
  • \n
  • yaml (paquet yaml) — une alternative moderne avec prise en charge du parsing strict, des commentaires et de l'AST (arbre syntaxique abstrait).
  • \n
  • yamljs — une bibliothèque légère avec une API simple, adaptée aux tâches de base.
  • \n
\n\n

Installation de la bibliothèque js-yaml

\n\n

Pour commencer à travailler avec YAML dans Node.js, installez la bibliothèque via npm :

\n\n
npm install js-yaml
\n\n

Après l'installation, importez la bibliothèque dans votre projet :

\n\n
const yaml = require('js-yaml');\nconst fs = require('fs');
\n\n

Parsing YAML en objet JavaScript

\n\n

L'opération principale — convertir une chaîne YAML en objet JavaScript :

\n\n
const yamlString = `\nserver:\n  host: localhost\n  port: 8080\n  ssl: true\ndatabases:\n  - name: users\n    type: postgres\n  - name: logs\n    type: mongodb\n`;\n\ntry {\n  const data = yaml.load(yamlString);\n  console.log(data.server.host); // "localhost"\n  console.log(data.databases[0].name); // "users"\n} catch (e) {\n  console.error('Erreur de parsing YAML :', e.message);\n}
\n\n

La méthode yaml.load() convertit en toute sécurité une chaîne YAML en objet. Pour charger depuis un fichier, utilisez :

\n\n
try {\n  const config = yaml.load(fs.readFileSync('config.yaml', 'utf8'));\n  console.log(config);\n} catch (e) {\n  console.error('Erreur de lecture de la configuration :', e);\n}
\n\n

Sérialisation d'un objet JavaScript en YAML

\n\n

L'opération inverse — convertir un objet en chaîne YAML :

\n\n
const configObject = {\n  app: {\n    name: "MyApp",\n    version: "1.0.0"\n  },\n  features: ["auth", "logging", "analytics"],\n  database: {\n    host: "db.example.com",\n    port: 5432\n  }\n};\n\nconst yamlString = yaml.dump(configObject, {\n  indent: 2,\n  lineWidth: 120,\n  noRefs: true\n});\n\nconsole.log(yamlString);\n// Sortie :\n// app:\n//   name: MyApp\n//   version: 1.0.0\n// features:\n//   - auth\n//   - logging\n//   - analytics\n// database:\n//   host: db.example.com\n//   port: 5432
\n\n

Paramètres de la méthode yaml.dump() :

\n
    \n
  • indent — nombre d'espaces pour les retraits (par défaut 2)
  • \n
  • lineWidth — longueur maximale de la ligne (par défaut 80)
  • \n
  • noRefs — désactivation de l'utilisation des ancres et des références
  • \n
  • skipInvalid — ignorer les valeurs invalides au lieu de lever une erreur
  • \n
\n\n

Travailler avec des types YAML personnalisés

\n\n

js-yaml prend en charge les schémas et types de données personnalisés. Par exemple, on peut ajouter la prise en charge des dates :

\n\n
const yaml = require('js-yaml');\n\n// Création d'un schéma personnalisé avec prise en charge des dates\nconst schema = yaml.DEFAULT_SCHEMA.extend([\n  new yaml.Type('tag:yaml.org,2002:timestamp', {\n    kind: 'scalar',\n    resolve: (data) => {\n      return !isNaN(Date.parse(data));\n    },\n    construct: (data) => {\n      return new Date(data);\n    },\n    instanceOf: Date,\n    represent: (date) => {\n      return date.toISOString();\n    }\n  })\n]);\n\nconst yamlString = 'event_date: 2024-03-15T14:30:00Z';\nconst parsed = yaml.load(yamlString, { schema });\nconsole.log(parsed.event_date inst                    

Recommendations