أخرِج الإعدادات من الكود باستخدام dotenv، وافصِل التطوير عن الإنتاج، وأبقِ أسرارك خارج Git.
افتح هذا الدرس في Kodokonمنفذ الاستماع، ورابط قاعدة البيانات، ومفاتيح الواجهات البرمجية: لا مكان لأيّ من هذه في الكود المصدري. فهذه القيم تتغير بين جهازك والإنتاج، وبعضها أسرار. والحل المعياري: متغيرات البيئة، المُحمَّلة من ملف .env في التطوير. ثبِّت dotenv باستخدام npm install dotenv، ثم أنشئ الملف في جذر المشروع.
PORT=3000
DATABASE_URL=postgres://localhost:5432/kodokon
SESSION_SECRET=change-this-valueاستورِد dotenv/config في بداية نقطة الدخول تمامًا: تُنسَخ متغيرات الملف إلى process.env. عادة مهنية جيدة: مركزة القراءة في وحدة إعداد واحدة، والتحقق من صحة المتغيرات عند بدء التشغيل، والفشل فورًا إذا كان أحدها مفقودًا. فالخادم الذي يرفض بدء التشغيل أفضل من خادم ينهار عند أول طلب.
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"
};في الإنتاج، لا يوجد ملف .env: يوفّر المُضيف القيم الحقيقية، وتكون NODE_ENV هي production. استخدم config.isProd لتكييف السلوك: سجلات مفصّلة في التطوير، ورسائل خطأ مقتضبة في الإنتاج. كما يمكنك إيداع ملف .env.example يسرد المتغيرات المتوقعة بقيم وهمية: فهو يوثّق الإعداد دون كشف الأسرار.
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);
});.env يتجاهله Git.env.example؟.gitignore