تكوين تطبيقات JavaScript (Node.js): أفضل المكتبات والممارسات
أي تطبيق Node.js جاد يتطلب نظام تكوين مرن وآمن. كلمات مرور قواعد البيانات، مفاتيح API، منافذ الخوادم، مستويات التسجيل - كل هذه المعلمات يجب أن تكون منفصلة عن الكود، وقابلة للتغيير بسهولة في بيئات مختلفة (التطوير، الاختبار، الإنتاج)، والأهم من ذلك، ألا تصل إلى نظام التحكم في الإصدارات.
في هذه المقالة، سنستعرض المكتبات الثلاث الأكثر شيوعًا لإدارة التكوين في Node.js: dotenv و convict و nconf. ستتعلم كيفية تكوين التطبيقات بشكل صحيح، وتجنب الأخطاء الشائعة، واختيار الأداة المناسبة لمهامك.
1. dotenv - البساطة والأمان
dotenv هي المكتبة الأكثر شيوعًا لتحميل متغيرات البيئة من ملف .env. ميزتها الرئيسية هي البساطة. كل ما عليك فعله هو إنشاء ملف .env، وإضافة المعلمات الخاصة بك إليه، وتقوم المكتبة بتحميلها إلى process.env.
التثبيت والاستخدام الأساسي
npm install dotenvقم بإنشاء ملف .env في جذر المشروع:
PORT=3000DB_HOST=localhostDB_USER=adminDB_PASS=supersecretNODE_ENV=developmentفي بداية تطبيقك (عادةً في app.js أو index.js) أضف:
require('dotenv').config();
const express = require('express');const app = express();
const port = process.env.PORT || 3000;
app.listen(port, () => { console.log(`الخادم يعمل على المنفذ ${port}`);});قواعد مهمة للعمل مع dotenv
- لا تقم أبدًا بإضافة ملف
.envإلى Git. أضفه إلى.gitignore. - أنشئ ملف
.env.exampleيحتوي على قالب لجميع المتغيرات (بدون قيم حقيقية). سيساعد ذلك المطورين الجدد على فهم الأمور بسرعة. - لبيئة الإنتاج، استخدم متغيرات البيئة الحقيقية المحددة على الخادم.
dotenvمطلوب فقط للتطوير. - لا تخزن في
.envهياكل بيانات معقدة - فقط نصوص وأرقام.
2. convict - التحقق من الصحة والمخططات
إذا كان dotenv يحل مشكلة "كيفية التحميل"، فإن convict يجيب على سؤال "كيفية التحقق والتنظيم". تتيح لك هذه المكتبة تحديد مخطط تكوين بأنواع بيانات، وقيم افتراضية، وقواعد تحقق من الصحة.
التثبيت ومثال على المخطط
npm install convictconst convict = require('convict');
const config = convict({ env: { doc: 'بيئة التطبيق', format: ['production', 'development', 'test'], default: 'development', env: 'NODE_ENV' }, server: { port: { doc: 'منفذ خادم HTTP', format: 'port', default: 3000, env: 'PORT' } }, db: { host: { doc: 'مضيف قاعدة البيانات', format: String, default: 'localhost', env: 'DB_HOST' }, password: { doc: 'كلمة مرور قاعدة البيانات', format: String, default: '', env: 'DB_PASS', sensitive: true // لا تظهر في السجلات } }});
// تحميل القيمconfig.validate({ allowed: 'strict' });
module.exports = config;مزايا convict
- التحقق التلقائي من الصحة - إذا كان في
.envنص بدلاً من رقم، ستحصل على خطأ عند التشغيل. - التوثيق - حقل
docيعمل كتوثيق مدمج. - الأمان - الحقول المميزة بـ
sensitive: trueلا تظهر في السجلات. - دعم الهياكل المتداخلة - مناسب للتكوينات المعقدة.
3. nconf - التسلسل الهرمي للمصادر
nconf
أيضاً في المكتبة
توصيات