منذ ظهور Node.js في عام 2009، أصبح بالإمكان تشغيل لغة البرمجة جافاسكريبت في الخوادم بعد أن كانت فيما سبق حبيسة المتصفحات. لطالما كانت هذه اللغة ذات شعبية كبيرة في أوساط مطوري الويب لأنها لغة البرمجة الوحيدة التي نتواصل بها مع المتصفحات، ولكن بعد 2009 تضاعفت تلك الشعبية بعد أن امتد نفوذ جافاسكريبت للخوادم، وبداية عهد حزم npm.
المنافسة في بيئة الخوادم لم تكن مفروشة بالزهور مثلما هو الحال في المتصفحات، لغات برمجة مثل PHP، بايثون وروبي كانت موجودة منذ زمن فاعلة في هذا المجال، وليس من السهل على ضيف جديد أن يزاحمها على تلك المكانة.
ولكن الذي حدث أن Node.js حقق نجاحا كبيرا جدا على هذا المستوى، وأحدث ما يشبه ثورة في ميدان تطورير تطبيقات الويب. فلقد ظهرت تقنيات جديدة مبنية ومعتمدة على Node مثل Webpack ،Gulp.js ،Grunt.js وآلاف الحزم في مستودع npm قابلة للإضافة والتثبيت في المشاريع بسهولة تامة عن طريق الأوامر السطرية.
كذلك ظهر ما يعرف بأطر عمل Node.js أو Node.js Web Frameworks من أجل مساعدة المطورين على صناعة تطبيقات ويب حديثة بسهولة أكثر وتنظيم أفضل، ولأجل هذا النقطة بالذات بدأت في كتابة الموضوع.
هدفي هو عرض لائحة مصغرة لأشهر أطر عمل Node.js الخاصة بإنشاء تطبيقات الويب في أيامنا هذه، والتي من المنتظر أن تستمر في نموها وزيادة الطلب عليها في 2019 الذي نحن على أبوابه.
1. إكسبريس (Express)
لا يمكن أن نبدأ لائحة لأطر عمل Node.js ولا يكون إطار العمل Express في صدارتها.
إكسبريس يعتبر من أوائل أطر عمل Node.js وأقواها. يمتاز بسرعته ومرونته وكذلك بساطته، حيث أن الواجهة البرمجة التي يوفرها تساعدنا على إنشاء خادم Http والبدء في إرسال وتقلي Requests في دقائق معدودة.
واجهة Express البرمجية تعتمد بشكل أساسي على ما يعرف بال Middlewares، وكل تطبيق إكسبريس هو في الحقيقية سلسلة Middlewares على شكل دوال، كل Middleware يمررنا للتالي.
يستخدم إكسبريس على نطاق واسع لإنجاز واجهات برمجية (APIs) سريعة وعالية الأداء، وفي نفس الوقت يدعم أنظمة قوالب عديدة مثل Pug (أو Jade سابقا)، Ejs وغيرها…
2. Nest
يعرف Nest نفسه على أنه إطار عمل لبناء تطبيقات Node.js جانب الخادم فعالة (Efficient) وقابلة للتحجيم (Scalable).
لا يخفي مطور Nest سرا عندما قال بأنه تأثر بشكل كبير بإطار العمل Angular واستوحى منه العديد من الأشياء، وهو ما سيبدو جليا عند إنشائك لمشروع تجريبي بواسطة Nest.
يعتمد Nest على أكواد جافاسكريبت الحديثة (ES6, ES7, ES8) وكذلك على Typescript، ويجمع بين عدد من مبادئ البرمجة الشيئية، البرمجة الوظيفية والبرمجة الوظيفية التفاعلية (Functional Reactive Programming). يعني قليل من كل شيء :)
في الكواليس، يعتمد Nest كذلك على إطار العمل Express إضافة إلى مكتبات وأطر عمل أخرى (Fastify على سبيل المثال).
فلسفة Nest قائمة على وضع بنية (Architecture) واضحة ومتماسكة تبنى عليها تطبيقات Node.js جانب الخادم، الشئ الذي فشلت فيه أو أهملته ـ حسب رأيهم ـ معظم أطر عمل Node.js الأخرى.
3. Koa
Koa إطار عمل صغير مطور من قبل نفس الفريق الذي يقف خلف Express، ويتميز بكونه يركز على جزئية واحدة، وهي طريقة كتابة ال Middlewares.
يعتمد Koa على ميزة Async/Await في التعامل مع العمليات الغير متزامنة (Asynchronous) داخل ال Middleware من أجل تخليص المطورين من جحيم ال Callbacks، بالإضافة إلى أنه يقوم بتضمين المعلومات الخاصة بال Request في كائن خاص اسمه Context عوضا عن الإعتماد مباشرة على الكائنين req و res كما في إطار العمل Express.
هذا الإطار يختلف عن إكسبريس كذلك بكونه لا يوفر في نواته عددا من القطع الأساسية في أي إطار للعمل مثل Routing و Templating، ولكن يمكن إضافتها عند الحاجة على شكل وحدات مستقلة يتم تثبيتها عن طريق مدير الحزم npm.
Koa يستلزم تنصيب الإصدار 7.6.0 من Node.js على الأقل من أجل الحصول على دعم خاصية Async/Await.
4. Meteor
Meteor كذلك من أطر العمل التي لا يمكن غض النظر عنها، وقد سبق لنا أن خصصنا له مقالا كاملا على مدونة توتومينا لشرح فلسفته واختلافه عن باقي منافسيه.
ببساطة Meteor يتفرد بكونه يمكن من عمل تطبيقات الويب في جانبي الخادم والعميل، وهذه ميزة لا نجدها في أطر عمل Node.js أو جافاسكريبت الأخرى، فإطار العمل يكون خاص إما بتطبيقات ناحية الخادم أو بتطبيقات ناحية العميل، وليس الإثنين معا. إلا أن MeteorJS استطاع جمع المسألتين ووفر لمطوري جافاسكريبت منصة واحدة لبناء تطبيقات ويب متكاملة.
يعتبر Meteor من أقدم إطارات عمل جافاسكريبت، وله شعبية كبيرة ومجتمع نشيط حوله، وهذه ميزة في غاية الأهمية لأنها تساعد المبتدئين على الإندماج في هذه البيئة بسرعة وإيجاد الحلول لمختلق المشاكل التي قد يقعون فيها.
5. Sails.js
يتميز إطار العمل Sails.js بكونه يعتمد على نمط MVC، وهو إطار عمل MVC الأكثر شعبية في بيئة Node.js.
يوفر Sails.js دعما أصليا لعدد من أكثر أنظمة قواعد البيانات استخداما مثل Oracle ،MongoDB ،MySQL و PostgreSQL، ويأتي هذا الدعم على شكل طبقة مجردة (Abstract Layer) بفضل WaterLine. هذا الأخير عبارة عن ORM وهو بالنسبة ل Sails.js مثل Eloquent بالنسبة لإطار العمل لارافيل، وDoctrine لإطار العمل سيمفوني على سبيل المثال.
- اقرأ أيضا: ماهو Node.js وماهي مميزاته ؟
في الختام
أطر عمل Node.js كثيرة ومتناسلة بشكل سريع، ولكن حاولت في هذا الموضوع أن أحصرها في أقل عدد ممكن. فلكما كان عدد الخيارات أقل كلما كان اتخاذ القرار أسهل :)
أريد أن أسمع آراءكم حول أطر العمل التي ذكرتها في هذا المقال، هل سبق لكم العمل بواحد منها ؟ كيف كانت التجربة ؟
إذا كنتم ترون بأن هناك خيارا آخر يستحق أن يكون في هذه القائمة فلا تترددوا في مشاركة اسمه معنا في التعليقات :)