العمل مع YAML في Node.js: مكتبات js-yaml و yaml

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع YAML في JavaScript (Node.js)



YAML (YAML Ain't Markup Language) هو تنسيق تسلسل بيانات قابل للقراءة البشرية، يُستخدم غالبًا لملفات الإعدادات (مثل Docker Compose و Kubernetes و Ansible). في نظام Node.js البيئي، توجد مكتبتان رئيسيتان للعمل مع YAML: js-yaml (الأكثر شيوعًا) و yaml (الحديثة، مع دعم التدفقات).



في هذه المقالة، سنستعرض كلتا المكتبتين، ونتعلم كيفية تحليل YAML إلى كائنات JavaScript، وتسلسل الكائنات مرة أخرى إلى YAML، بالإضافة إلى معالجة الأخطاء والعمل مع الملفات.



تثبيت المكتبات



للبدء، قم بتثبيت إحدى المكتبات عبر npm:



# تثبيت js-yaml (موصى به لمعظم المشاريع)npm install js-yaml

# تثبيت المكتبة الأحدث yamlnpm install yaml


مكتبة js-yaml



js-yaml هي المكتبة الأكثر نضجًا واستخدامًا واسعًا للعمل مع YAML في Node.js. وهي تدعم مواصفات YAML 1.2 الكاملة، بما في ذلك أنواع البيانات المعقدة والعلامات (Tags) والمخططات (Schemas) المخصصة.



تحليل سلسلة 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('خطأ في تحليل YAML:', e.message);}


تحليل ملف 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('خطأ في قراءة الملف:', e.message);}


التسلسل إلى 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, // مسافة بادئة بمقدار فراغين lineWidth: 80, // أقصى طول للسطر noRefs: true, // عدم استخدام المراجع sortKeys: true // ترتيب المفاتيح});

console.log(yamlString);// الإخراج:// app:// name: MyApp// version: 1.0.0// features:// cache:// ttl: 3600// type: redis// logging: true


العمل مع الأنواع المخصصة



تدعم js-yaml العلامات المخصصة لـ YAML لمعالجة أنواع بيانات خاصة:



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

// إنشاء نوع مخصص للتاريخconst 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]});

// إنشاء مخطط بالنوع المخصصconst 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


مكتبة yaml



yaml هي مكتبة أحدث، تقدم تحليلًا تدفقيًا (Streaming Parsing) ودعمًا أفضل لـ Unicode. كما أنها تنفذ مواصفات YAML 1.2.



التحليل الأساسي



const YAML = require('yaml');

const doc = YAML.parse(`person: name: إيفان age: 30 hobbies: - برمجة - قراءة`);

console.log(doc.person.name); // "إيفان"console.log(doc.person.hobbies[0]); // "برمجة"

توصيات