𝗗𝗲𝗳𝗶𝗻𝗲 𝗢𝗻𝗰𝗲, 𝗧𝗿𝘂𝘀𝘁 𝗘𝘃𝗲𝗿𝘆𝘄𝗵𝗲𝗿𝗲
CtroEnv sử dụng bốn factory validator cốt lõi để giữ cho các biến môi trường của bạn luôn an toàn.
Dưới đây là cách chúng hoạt động:
string() dành cho văn bản Sử dụng cái này cho URL, email và cổng (ports). Bạn có thể chuỗi các quy tắc như .min() hoặc .max() để thiết lập giới hạn độ dài.
number() dành cho các giá trị số Cái này chuyển đổi các chuỗi như "3000" thành các số thực thụ. Bạn có thể bắt buộc sử dụng số nguyên hoặc các giá trị dương.
boolean() dành cho true hoặc false Cái này xử lý các feature flag. Nó chuyển đổi "true", "1", hoặc "false" thành các giá trị boolean thực thụ.
pick() dành cho các tập hợp cụ thể Sử dụng cái này để giới hạn các giá trị trong một danh sách. Ví dụ, bạn có thể bắt buộc NODE_ENV chỉ được là "development", "staging", hoặc "production". Nếu bạn gõ sai, thông báo lỗi sẽ gợi ý cách viết đúng.
Các công cụ hữu ích cho mọi validator:
• .default(value) - Thiết lập giá trị dự phòng nếu biến bị thiếu. • .optional() - Cho phép biến có thể là undefined. • .secret() - Che giấu dữ liệu nhạy cảm trong nhật ký (logs) của bạn. • .describe(text) - Thêm tài liệu hướng dẫn cho các thông báo lỗi của bạn. • .validate(fn) - Cho phép bạn viết logic tùy chỉnh cho các quy tắc riêng biệt.
CtroEnv hoạt động trên các môi trường khác nhau:
- Node.js: Sử dụng nodeSource() hoặc loadEnv() để đọc các tệp .env.
- Vite: Sử dụng vitePlugin để làm thất bại quá trình build nếu các biến không hợp lệ.
- Next.js: Sử dụng hỗ trợ tích hợp sẵn để tách biệt các biến server và client. Điều này giúp ngăn chặn việc vô tình để lộ các thông tin bí mật ra trình duyệt.
Khi việc xác thực thất bại, CtroEnv không chỉ dừng lại. Nó thu thập từng lỗi một và hiển thị tất cả cùng một lúc. Bạn sẽ nhận được một danh sách rõ ràng về những gì còn thiếu, những gì sai kiểu dữ liệu và những gì không vượt qua được các quy tắc tùy chỉnh của bạn.
Điều này giúp cấu hình của bạn luôn bất biến và runtime của bạn có thể dự đoán được.
Nguồn: https://dev.to/ctrotech/define-once-trust-everywhere-ctroenv-deep-dive-3bjl