Skip to content

Node.js، الفرق بين التطوير والإنتاج

لا يوجد فرق بين التطوير والإنتاج في Node.js، أي لا توجد إعدادات معينة تحتاج إلى تطبيقها لجعل Node.js يعمل في تكوين الإنتاج. ومع ذلك، تتعرف بعض المكتبات في سجل npm على استخدام متغير NODE_ENV وتجعله افتراضيًا إلى إعداد development. قم دائمًا بتشغيل Node.js الخاص بك مع تعيين NODE_ENV=production.

تتمثل إحدى الطرق الشائعة لتكوين تطبيقك في استخدام منهجية العوامل الاثني عشر.

NODE_ENV في Express

في إطار العمل الشهير express، يضمن تعيين NODE_ENV على الإنتاج عمومًا ما يلي:

  • يتم الاحتفاظ بالتسجيل في الحد الأدنى من المستوى الأساسي
  • يتم تنفيذ المزيد من مستويات التخزين المؤقت لتحسين الأداء

يتم ذلك عادةً عن طريق تنفيذ الأمر

bash
export NODE_ENV=production

في shell، ولكن من الأفضل وضعه في ملف تكوين shell الخاص بك (على سبيل المثال .bash_profile مع Bash shell) لأنه بخلاف ذلك لا يستمر الإعداد في حالة إعادة تشغيل النظام.

يمكنك أيضًا تطبيق متغير البيئة عن طريق إلحاقه بأمر تهيئة التطبيق الخاص بك:

bash
NODE_ENV=production node app.js

على سبيل المثال، في تطبيق Express، يمكنك استخدام هذا لتعيين معالجات أخطاء مختلفة لكل بيئة:

javascript
if (process.env.NODE_ENV === 'development') {
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
}
if (process.env.NODE_ENV === 'production') {
  app.use(express.errorHandler());
}

على سبيل المثال [Pug](https://pugjs.org]، يتم تجميع مكتبة القوالب المستخدمة بواسطة [Express.js](https://expressjs.com] في وضع التصحيح إذا لم يتم تعيين NODE_ENV على production. يتم تجميع طرق عرض Express في كل طلب في وضع التطوير، بينما يتم تخزينها مؤقتًا في وضع الإنتاج. هناك العديد من الأمثلة الأخرى.

متغير البيئة هذا هو اتفاقية مستخدمة على نطاق واسع في المكتبات الخارجية، ولكن ليس داخل Node.js نفسه.

لماذا تعتبر NODE_ENV نمطًا مضادًا؟

البيئة عبارة عن نظام أساسي رقمي أو نظام حيث يمكن للمهندسين إنشاء واختبار ونشر وإدارة منتجات البرامج. تقليديا، هناك أربع مراحل أو أنواع من البيئات التي يتم فيها تشغيل تطبيقنا:

  • تطوير
  • التدريج
  • إنتاج
  • اختبار

تنشأ المشكلة الأساسية في NODE_ENV من قيام المطورين بدمج التحسينات وسلوك البرنامج مع البيئة التي يتم تشغيل برنامجهم عليها. والنتيجة هي التعليمات البرمجية التالية:

javascript
if (process.env.NODE_ENV === 'development') {
  // ...
}
if (process.env.NODE_ENV === 'staging') {
  // ...
}
if (process.env.NODE_ENV === 'production') {
  // ...
}
if (process.env.NODE_ENV === 'testing') {
  // ...
}

في حين أن هذا قد يبدو غير ضار، إلا أنه يجعل بيئتي الإنتاج والتدريج مختلفتين، مما يجعل الاختبار الموثوق به مستحيلاً. على سبيل المثال، يمكن أن ينجح اختبار وبالتالي وظيفة منتجك عندما يتم تعيين NODE_ENV على development ولكن يفشل عند تعيين NODE_ENV على production. لذلك، يعتبر تعيين NODE_ENV على أي شيء بخلاف production نمطًا مضادًا.