Skip to content
Grok

Environment Variables (การจัดการตัวแปรสภาพแวดล้อม)

Environment Variables เป็นวิธีการเก็บค่าต่างๆ ที่ใช้ในการ configure แอปพลิเคชัน เช่น API keys, database URLs, หรือการตั้งค่าอื่นๆ ที่แตกต่างกันระหว่าง environment

Built-in Environment Variables (ตัวแปรสภาพแวดล้อมพื้นฐาน)

Node.js มี object process.env สำหรับการเข้าถึง environment variables โดยตรง

ts
// ตัวอย่างการใช้งาน process.env พื้นฐาน
const nodeEnv = process.env.NODE_ENV || "development";
const port = process.env.PORT ? parseInt(process.env.PORT) : 3000;

console.log(`Running in ${nodeEnv} mode on port ${port}`);

dotenv (แพ็คเกจจัดการไฟล์ .env)

dotenv เป็นแพ็คเกจที่ช่วยโหลด environment variables จากไฟล์ .env เข้าไปใน process.env

ติดตั้ง

bash
npm install dotenv

วิธีใช้

สร้างไฟล์ .env ที่ root ของโปรเจค:

bash
NODE_ENV=development
PORT=3000
DATABASE_URL=postgres://user:pass@localhost:5432/mydb
JWT_SECRET=your-super-secret-key

จากนั้นโหลดในไฟล์หลักของแอป:

ts
import dotenv from "dotenv";
import path from "path";

// โหลด environment variables
const envPath = path.resolve(process.cwd(), ".env");
dotenv.config({ path: envPath });

// ใช้งาน environment variables
const config = {
  env: process.env.NODE_ENV || "development",
  port: process.env.PORT ? parseInt(process.env.PORT) : 3000,
  databaseUrl: process.env.DATABASE_URL,
  jwtSecret: process.env.JWT_SECRET,
};

export default config;

Type Safety (การตรวจสอบประเภทข้อมูล)

เพื่อความปลอดภัย ควรประกาศ type สำหรับ environment variables:

ts
namespace NodeJS {
  interface ProcessEnv {
    NODE_ENV: "development" | "production" | "test";
    PORT?: string;
    DATABASE_URL: string;
    JWT_SECRET: string;
  }
}

Vite Environment Variables (สำหรับ Frontend)

Vite ใช้ import.meta.env แทน process.env และต้องมี prefix VITE_

bash
VITE_API_URL=https://api.example.com
VITE_APP_TITLE=My Awesome App

ประกาศ type สำหรับ Vite:

ts
/// <reference types="vite/client" />

interface ImportMetaEnv {
  readonly VITE_API_URL: string;
  readonly VITE_APP_TITLE: string;
}

interface ImportMeta {
  readonly env: ImportMetaEnv;
}

Best Practices (แนวทางปฏิบัติที่ดี)

1. อย่า Commit ไฟล์ .env

เพิ่ม .env ลงใน .gitignore:

bash
# Environment variables
.env
.env.local
.env.*.local

2. ใช้ .env.example

สร้างไฟล์ .env.example เพื่อเป็น template:

bash
NODE_ENV=development
PORT=3000
DATABASE_URL=your_database_url_here
JWT_SECRET=your_jwt_secret_here

3. ตรวจสอบค่าที่จำเป็น

ts
function getRequiredEnvVar(key: string): string {
  const value = process.env[key];
  if (!value) {
    throw new Error(`Environment variable ${key} is required`);
  }
  return value;
}

const config = {
  databaseUrl: getRequiredEnvVar("DATABASE_URL"),
  jwtSecret: getRequiredEnvVar("JWT_SECRET"),
};

ตัวอย่างการใช้งานจริง

1. ตั้งค่า Database

ts
import { Pool } from "pg";
import config from "./config";

const pool = new Pool({
  connectionString: config.databaseUrl,
  ssl: config.env === "production" ? { rejectUnauthorized: false } : false,
});

export default pool;

2. ตั้งค่า JWT

ts
import jwt from "jsonwebtoken";
import config from "../config";

export function generateToken(payload: object): string {
  return jwt.sign(payload, config.jwtSecret, {
    expiresIn: "1d",
  });
}

export function verifyToken(token: string): any {
  return jwt.verify(token, config.jwtSecret);
}

สรุป

  • ใช้ process.env สำหรับ Node.js และ import.meta.env สำหรับ Vite
  • ใช้ dotenv เพื่อโหลด environment variables จากไฟล์ .env
  • ประกาศ type เพื่อความปลอดภัย
  • อย่าลืมเพิ่ม .env ใน .gitignore
  • ใช้ .env.example เป็น template
  • ตรวจสอบค่าที่จำเป็นก่อนใช้งาน

การจัดการ environment variables อย่างถูกต้องจะช่วยให้แอปพลิเคชันของคุณปลอดภัยและยืดหยุ่นมากขึ้นในการ deploy ไปยัง environment ต่างๆ