חדש ב Node.JS - תמיכה מובנית בקבצי env

10/09/2023

במסגרת הפינוקים הלא נחוצים של node.js, גירסה 20.6 הוסיפה תמיכה בקבצי env. מצד אחד זה אחלה כי אם יש לנו כבר קבצי env שאנחנו טוענים אותם מתוך דוקר או סביבת הרצה אחרת, נוכל עכשיו יותר בקלות לטעון אותם גם בלי סביבת הדוקר. מצד שני גם בלי תמיכה זו אפשר היה לטעון קבצי env בצורה פשוטה דרך שורת הפקודה.

בקיצור בואו נראה על מה מדובר-

1. מה זה קובץ env

קובץ .env הוא קובץ שכולל רשימה של משתני סביבה וערכים שלהם. בדרך כלל לא נשים אותו במאגר הגיט של הפרויקט אלא ניצור את הקובץ על המכונה שמריצה את הפרויקט. כל מכונה תקבל קובץ env שלה והמשתנים שכתובים בו יגרמו לתוכנה לעבוד לפי הסביבה של המכונה. לדוגמה על סביבת פרודקשן יהיה קובץ .env שיגדיר מפתח API מסוים וסיסמה מסוימת לבסיס נתונים, ועל מכונת פיתוח יהיה קובץ .env עם הגדרות אחרות.

מבנה פשוט של קובץ .env הוא:

API_KEY=secret-key-from-env-file
DB_HOST=db
DB_PASSWORD=kinkly-impack-worst-outray

2. איך לטעון אותו לפני הרצת כל תוכנית

אם יש לי קובץ env בפרויקט ואני רוצה לטעון אותו לפני הרצת תוכנית מתוך שורת הפקודה, הדרך הכי קלה היא לייצא את כל משתני הסביבה עם export ואז להפעיל את התוכנית, כלומר משהו כזה:

$ source <(cat .env| sed 's/^/export /')

זה כמובן לא מושלם כי שטויות שכותבים בקובץ עשויות לרוץ כמו קוד רגיל ואין התעלמות משורות שמתחילות בסולמית. למשל השורה הבאה בקובץ env תיצור קובץ חדש אם ננסה להריץ אותו בשיטה שראינו:

NAME=ynon && touch newfile

3. איך לטעון אותו עם התמיכה החדשה של node.js

בחזרה ל node.js. גירסה 20.6 שלו כוללת תמיכה מובנית בקבצי env ועכשיו אפשר פשוט להריץ את התוכנית עם המתג --env-file:

$ node --env-file .env a.js

מה שעוד נחמד זה שאפשר להשתמש כמה פעמים במתג כדי לטעון משתני סביבה מכמה קבצי env:

$ node --env-file .env.development --env-file .env a.js

וכך לכתוב את משתני הסביבה המשותפים לכל הסביבות בקובץ .env משותף ואת המשתנים הייחודיים לכל סביבה לשמור בקובץ env שמתאים לסביבה שלו.