Kodokon kodokon.com

الإعداد والأسرار

أخرِج الإعدادات من الكود باستخدام dotenv، وافصِل التطوير عن الإنتاج، وأبقِ أسرارك خارج Git.

8 دقيقة · 3 أسئلة

افتح هذا الدرس في Kodokon

منفذ الاستماع، ورابط قاعدة البيانات، ومفاتيح الواجهات البرمجية: لا مكان لأيّ من هذه في الكود المصدري. فهذه القيم تتغير بين جهازك والإنتاج، وبعضها أسرار. والحل المعياري: متغيرات البيئة، المُحمَّلة من ملف .env في التطوير. ثبِّت dotenv باستخدام npm install dotenv، ثم أنشئ الملف في جذر المشروع.

BASH
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-value
.env - متغير واحد في كل سطر

استورِد dotenv/config في بداية نقطة الدخول تمامًا: تُنسَخ متغيرات الملف إلى process.env. عادة مهنية جيدة: مركزة القراءة في وحدة إعداد واحدة، والتحقق من صحة المتغيرات عند بدء التشغيل، والفشل فورًا إذا كان أحدها مفقودًا. فالخادم الذي يرفض بدء التشغيل أفضل من خادم ينهار عند أول طلب.

JAVASCRIPT
import "dotenv/config";

const required = ["PORT", "SESSION_SECRET"];

for (const name of required) {
  if (!process.env[name]) {
    throw new Error("Missing variable: " + name);
  }
}

export const config = {
  port: Number(process.env.PORT),
  secret: process.env.SESSION_SECRET,
  isProd: process.env.NODE_ENV === "production"
};
config.js - الوحدة الوحيدة التي تقرأ process.env

في الإنتاج، لا يوجد ملف .env: يوفّر المُضيف القيم الحقيقية، وتكون NODE_ENV هي production. استخدم config.isProd لتكييف السلوك: سجلات مفصّلة في التطوير، ورسائل خطأ مقتضبة في الإنتاج. كما يمكنك إيداع ملف .env.example يسرد المتغيرات المتوقعة بقيم وهمية: فهو يوثّق الإعداد دون كشف الأسرار.

JAVASCRIPT
import express from "express";
import { config } from "./config.js";

const app = express();

if (!config.isProd) {
  console.log("Development mode");
}

app.listen(config.port, () => {
  console.log("Port: " + config.port);
});
server.js - بقية الكود تتجاهل process.env

اختبار المعرفة

تأكّد من أنك تذكّرت النقاط الأساسية في هذا الدرس.

  1. أين تضع كلمة مرور قاعدة البيانات؟
    • في ثابت في الكود المصدري
    • في ملف .env يتجاهله Git
    • في ملف README الخاص بالمشروع
    • في تعليق داخل ملف الإعداد
  2. ما الغرض من ملف .env.example؟
    • الاحتفاظ بالقيم الاحتياطية الحقيقية
    • توثيق المتغيرات المتوقعة، دون قيم حساسة
    • إعداد بيئة الاختبار
  3. أُودِع سرّ عن طريق الخطأ. ماذا تفعل أولًا؟
    • حذف الإيداع والمضي قدمًا
    • إبطال السرّ وإنشاء واحد جديد
    • إضافة الملف إلى .gitignore