Dark mode
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 ต่างๆ