typescript - איך להשתמש במשתני סביבה בקבצי השורש של פרויקט SvelteKit שלך?
יש לי פרויקט SvelteKit שמשתמש ב-TypeScript עם קובץ .env בשורש. בשורש הוספתי קובץ drizzle.config.ts. כאשר אני מוסיף את הבא למעלה:
_import { DATABASE_HOST} from '$env/static/private';_
אז גם WebStorm וגם VSCode מציגים לי את השגיאה הבאה:
_Cannot find module '$env/static/private' or its corresponding type declarations._
זה גם קורה כאשר אני מתחיל פרויקט SvelteKit חדש לחלוטין ומוסיף את הקבצים כפי שצוין למעלה, אז אני מניח שזה יהיה קל לשחזר את הבעיה.
הפעלתי מחדש את VsCode, Webstorm והמחשב שלי. ניסיתי לעשות את זה באמצעות פרויקט חדש. אף אחד מהדברים האלה לא עבד. הרבה פוסטים אומרים לי לשנות כמה קבצי הגדרות. ניסיתי כמה מהם אבל הם לא עבדו. אני גם מרגיש שזה לא אמור להיות הפתרון כי אמור להיות פתרון מתוך הקופסה?
האם מישהו יכול להסביר למה זה לא עובד, ומה הדרך הנכונה להשתמש במשתני סביבה בקבצים הראשיים ב-SvelteKit?
תודה מראש!
תשובה #1
אתה יכול להשתמש רק במודולים של $env בקוד של אפליקציית SvelteKit (בדרך כלל דברים בתוך src) כי זה מעובד על ידי הבנייה שמזריקה את המשתנים בהתאם.
בקבצים אחרים עליך להשתמש בכל מנגנון שהסביבת הריצה שלך המספקת להפעיל את הקובץ מספקת לגישה למשתני סביבה, לדוגמה ב-Node יש process.env.
תשובה #2
עבור sveltekit:
מקם את הקובץ .env בתיקיית השורש של הפרויקט.
הוסף למשתנים סטטיים פרטיים (שרת בלבד) את הקידומת SECRET_
הוסף את הקידומת PUBLIC_ למשתנים סטטיים ציבוריים (כולל לקוח)
דוגמה ל-.env:
SECRET_DB_HOST=myhost
SECRET_PASSWORD=mypass
אתה יכול אז לייבא ולהשתמש ב:
import { SECRET_DB_HOST, SECRET_PASSWORD } from '$env/static/private';
אתה יכול לוודא ש-sveltekit אכן מזריק את המשתנים האלה לקובץ .svelte-kit/ambient.d.ts
