معالجة Markdown في Node.js: المكتبات marked و showdown و remarkable

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

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

ابدأ الدورة

العمل مع Markdown في Node.js: مكتبات للتحليل والتحويل

\n\n

Markdown هي لغة ترميز خفيفة، تُستخدم على نطاق واسع لتنسيق النص في التوثيق وملفات README والمدونات وأنظمة إدارة المحتوى. في بيئة Node.js، توجد عدة مكتبات قوية تسمح بتحليل Markdown وتحويله إلى HTML، بالإضافة إلى إجراء العملية العكسية. في هذه المقالة، سنستعرض ثلاثة من أشهر الأدوات: marked و showdown و remarkable، وميزاتها وواجهات برمجة التطبيقات (API) وأمثلة على الاستخدام.

\n\n

1. مكتبة marked

\n\n

marked هو محلل Markdown سريع وخفيف الوزن، يدعم جميع عناصر الصياغة الأساسية (العناوين، القوائم، الروابط، الصور، الكود، الجداول، إلخ). يتميز بأداء عالٍ وسهولة في التهيئة.

\n\n

التثبيت

\n
npm install marked
\n\n

الاستخدام الأساسي

\n

لتحويل سلسلة Markdown إلى HTML، يكفي استدعاء الدالة marked():

\n
const marked = require('marked');\n\nconst markdownText = `\n# مرحباً بالعالم!\n\nهذا **نص عريض** و *مائل*.\n\n- عنصر قائمة 1\n- عنصر قائمة 2\n\n[رابط إلى PythonLib](https://pythonlib.ru)\n`;\n\nconst html = marked(markdownText);\nconsole.log(html);\n
\n\n

نتيجة التنفيذ:

\n
<h1>مرحباً بالعالم!</h1>\n<p>هذا <strong>نص عريض</strong> و <em>مائل</em>.</p>\n<ul>\n<li>عنصر قائمة 1</li>\n<li>عنصر قائمة 2</li>\n</ul>\n<p><a href="https://pythonlib.ru">رابط إلى PythonLib</a></p>
\n\n

تهيئة الخيارات

\n

يدعم marked العديد من الخيارات لتخصيص المخرجات:

\n
const marked = require('marked');\n\nmarked.setOptions({\n  breaks: true,       // تحويل فواصل الأسطر إلى <br>\n  gfm: true,          // تفعيل GitHub Flavored Markdown (الجداول، الشطب، إلخ)\n  headerIds: false,   // عدم إضافة معرفات للعناوين\n  mangle: false,      // عدم ترميز عناوين البريد الإلكتروني\n  sanitize: false     // عدم إزالة وسوم HTML (خطير، استخدم بحذر)\n});\n\nconst html = marked('السطر 1\\nالسطر 2');\nconsole.log(html); // سيُظهر مع <br> بين الأسطر\n
\n\n

الاستخدام المتزامن وغير المتزامن

\n

بشكل افتراضي، تعمل marked() بشكل متزامن، ولكنها تدعم أيضًا الوضع غير المتزامن عبر الوعود (Promises):

\n
const marked = require('marked');\n\nasync function convertMarkdown(text) {\n  const html = await marked.parse(text);\n  return html;\n}\n\nconvertMarkdown('# عنوان').then(console.log);\n
\n\n

2. مكتبة showdown

\n\n

showdown هو محلل Markdown شائع آخر، يمكنه العمل في المتصفح وفي Node.js. يوفر واجهة برمجة تطبيقات قابلة للتوسع ويدعم العديد من الإضافات.

\n\n

التثبيت

\n
npm install showdown
\n\n

الاستخدام الأساسي

\n

أنشئ مثيلاً للمحول واستدعِ الطريقة makeHtml():

\n
const showdown = require('showdown');\nconst converter = new showdown.Converter();\n\nconst markdownText = '## عنوان فرعي\\n\\nنص عادي مع **تأكيد**.';\nconst html = converter.makeHtml(markdownText);\nconsole.log(html);\n
\n\n

النتيجة:

\n
<h2>عنوان فرعي</h2>\n<p>نص عادي مع <strong>تأكيد</strong>.</p>
\n\n

الإضافات والتخصيص

\n

يسمح showdown بإضافة إضافات مخصصة، على سبيل المثال، لدعم الرموز التعبيرية أو صيغ LaTeX:

\n
const showdown = require('showdown');\n\n// إنشاء إضافة لاستبدال :smile: برمز تعبيري\nconst emojiExtension = function() {\n  return [{\n    type: 'lang',\n    regex: /:smile:/g,\n    replace: '😊'\n  }];\n};\n\n                    

توصيات