𝗗𝗲𝗳𝗶𝗻𝗲 𝗢𝗻𝗰𝗲, 𝗧𝗿𝘂𝘀𝘁 𝗘𝘃𝗲𝗿𝘆𝘄𝗵𝗲𝗿𝗲
CtroEnv ใช้ validator factory หลัก 4 รูปแบบ เพื่อรักษาความปลอดภัยให้กับ environment variables ของคุณ
นี่คือวิธีการทำงานของพวกมัน:
string() สำหรับข้อความ ใช้สำหรับ URL, อีเมล และพอร์ต คุณสามารถต่อกฎ (chain rules) เช่น .min() หรือ .max() เพื่อกำหนดขีดจำกัดความยาวได้
number() สำหรับค่าตัวเลข สิ่งนี้จะแปลงสตริงอย่าง "3000" ให้เป็นตัวเลขจริง คุณสามารถบังคับให้เป็นจำนวนเต็มหรือค่าบวกได้
boolean() สำหรับค่า true หรือ false ใช้สำหรับจัดการ feature flags โดยจะเปลี่ยน "true", "1" หรือ "false" ให้เป็นค่า boolean จริงๆ
pick() สำหรับชุดค่าที่กำหนด ใช้เพื่อจำกัดค่าให้อยู่ในรายการที่กำหนด ตัวอย่างเช่น คุณสามารถบังคับให้ NODE_ENV เป็นได้เพียง "development", "staging" หรือ "production" เท่านั้น หากคุณพิมพ์ผิด ข้อผิดพลาดจะแนะนำตัวสะกดที่ถูกต้องให้
เครื่องมือที่มีประโยชน์สำหรับทุก validator:
• .default(value) - กำหนดค่าเริ่มต้นหากไม่พบตัวแปร • .optional() - อนุญาตให้ตัวแปรเป็น undefined ได้ • .secret() - ปิดบังข้อมูลที่ละเอียดอ่อนใน log ของคุณ • .describe(text) - เพิ่มคำอธิบายสำหรับข้อความแสดงข้อผิดพลาดของคุณ • .validate(fn) - ช่วยให้คุณเขียน logic เฉพาะตัวสำหรับกฎที่ใช้งานเพียงครั้งเดียวได้
CtroEnv ทำงานได้ในสภาพแวดล้อมที่หลากหลาย:
- Node.js: ใช้ nodeSource() หรือ loadEnv() เพื่ออ่านไฟล์ .env
- Vite: ใช้ vitePlugin เพื่อให้การ build ล้มเหลวหากตัวแปรไม่ถูกต้อง
- Next.js: ใช้การรองรับที่มีมาให้ในตัวเพื่อแยกตัวแปรฝั่ง server และ client ออกจากกัน ซึ่งจะช่วยป้องกันไม่ให้คุณเผลอเปิดเผยความลับ (secrets) ไปยังเบราว์เซอร์โดยไม่ตั้งใจ
เมื่อการตรวจสอบ (validation) ล้มเหลว CtroEnv จะไม่เพียงแค่หยุดทำงาน แต่จะรวบรวมข้อผิดพลาดทั้งหมดและแสดงออกมาพร้อมกันในคราวเดียว คุณจะได้รับรายการที่ชัดเจนว่ามีอะไรที่ขาดหายไป อะไรที่มีประเภทข้อมูลไม่ถูกต้อง และอะไรที่ไม่ผ่านกฎที่คุณกำหนดไว้
สิ่งนี้ช่วยให้การกำหนดค่า (configuration) ของคุณไม่สามารถเปลี่ยนแปลงได้ (immutable) และทำให้การทำงานในขณะรันไทม์ (runtime) สามารถคาดการณ์ได้
Source: https://dev.to/ctrotech/define-once-trust-everywhere-ctroenv-deep-dive-3bjl