node-20-env-with-confident preview

ลองใช้ Built-in env file ใน Node 20

ก่อนหน้านี้การทำงานกับ .env file บน nodejs เราจะต้องใช้แพ็กเพจที่ชื่อว่า dotenv ช่วย เพราะเค้าเขียนมาดี จัดการการอ่าน config อะไรให้หมด จบในแพ็กเกจเดียว

แต่ใน Node 20 ที่กำลังจะ Release ในวันที่ 24 ตุลานี้ เค้ามี Built-in env file มาให้โดยไม่ต้องติดตั้งอะไรเพิ่ม ก็เลยอยากมาลองใช้ดูว่าแจ่มแมวมั้ย ประหยัด package ที่ต้อง maintain version ไปอีกหนึ่ง

เริ่มกันเลย

ก่อนอื่น ติดตั้ง Node 20 ก่อน

เราใช้ volta ในการจัดการ Node version

mkdir node-20-env
cd node-20-env
npm init -y
volta pin node@20
touch index.js

ยาวหน่อย แต่สรุปก็คือ สร้างโฟลเดอร์สำหรับโปรเจคใหม่ initialize npm package และปัก node@20 เป็น node version ที่เราจะใช้ในโปรเจคนี้ด้วย volta นั่นเอง

ใครยังไม่เคยใช้หรือยังไม่รู้จัก volta ตามไปอ่านได้ที่นี่

สร้าง env file

# .env
PORT=3000
APP_NAME=Node 20 with built-in env file

เตรียมฟังก์ชั่นสำหรับเอาค่าจาก env มาใช้ในแอพ

ในครั้งที่เราจะใช้ zod มาช่วยในการทำ env validation เพื่อให้เรามั่นใจจริงๆ ว่า env ที่แอพจะนำไปใช้นั้นถูกต้องจริงๆ

ก่อนอื่นก็ต้องติดตั้ง zod ก่อน

npm i zod

จากนั้นเขียนฟังก์ชั่นสำหรับอ่านและ validate env

// env.js

import { z } from "zod";

/**
 * @typedef {object} Env
 * @property {string} APP_NAME
 * @property {number} PORT
 */
export const envSchema = z.object({
  APP_NAME: z.string(),
  PORT: z.string().regex(/^\d+$/).transform(Number),
});

/**
 * @type {Env}
 */
export const env = envSchema.parse(process.env);

หลังๆ มาถ้าเป็นโปรเจคส่วนตัวไม่ได้ทำงานร่วมกับใคร ผมจะใช้เพียง JavaScript เพราะขี้เกียจ แต่จะใช้ JSDoc เขียนกำกับเอาไว้แทน สะดวกดี

จากนั้นใน index.js ที่เราสร้างเอาไว้ตอนต้น ให้เรา import env มาใช้งาน

// index.js

import { env } from "./env.js";

function main() {
  console.log("Hello, this is ", env.APP_NAME, " running on port ", env.PORT);
}

main();

ลองรันดู

node --env-file=.env index.js

ผลลัพธ์ที่ได้

Hello, this is  Node 20 with built-in env file  running on port  3000

เซ็ท scripts ใน package.json

{
  "scripts": {
    "start": "node --env-file=.env index.js"
  }
}

ลองรันดูอีกที

npm start

ผลลัพธ์ที่ได้

Hello, this is  Node 20 with built-in env file  running on port  3000

สรุป

เป็นไงบ้างกับความสามารถของ Node 20 สะดวกเลยใช่มั้ยล่ะ เท่าที่ใช้งานเบื้องต้นแบบไม่มีท่าพิศดาร ก็ยังไม่เจอข้อจำกัดอะไร แต่ยังไม่ได้ลองการใช้งานอื่นๆด้วย เช่น อ่าน env หลายๆ ไฟล์ได้หรือมั้ย การ merge env files จัดการยังไง

ยังไงก็นำไปทดลองใช้งานดู ขอให้สนุกกับการเขียนโค้ดครับ

← ใช้ Honojs กับ Cloudflare Pages Functions ทำ Transaction ใน redis ด้วย MULTI และ WATCH →