امیرحسین بیگی | AmirHossein Beigi
امیرحسین بیگی | AmirHossein Beigi
خواندن ۲ دقیقه·۳ سال پیش

چطوری ENV رو موقع Runtime ست کنیم؟

تصویر بالا به این اشاره دارد که قرار است اپ فرانت روی چندین سرور با متغیر های ENV متفاوت داشته باشیم.
تصویر بالا به این اشاره دارد که قرار است اپ فرانت روی چندین سرور با متغیر های ENV متفاوت داشته باشیم.
فکر شو نمیکردم روزی به این چالش ها بخورم و خیلی خوشحالم از این بابت و در ادامه قراره است چندین مطلب از چیز هایی که بهش برخورد کردم رو بنویسم.

اقا ما فرانت که زده بودیم رو داکرایز کردیم و همه چی عالی بود تا اینکه باید ایمیج رو روی چندین سرور متفاوت می آوردیم بالا.

فرانتمون CSR بود و با Create React App ساخته شده بود و به این صورت بود که بیلد میکردیم و محتوا بیلد شده داخل ایمیج بود.

نیاز داشتیم که env های اپ رو برای سرور های مختلف متناسب با همون تنظیم کنیم و میخواستیم اینکارو با قرار دادن envهامون داخل docker compose بکنیم و چون env ها موقع بیلد قرار می گرفتند و بیلدی دیگر اجرا نمیشد نیاز شد که ما بتونیم متغیر های envمونو موقع runtime ست کنیم.


چطور؟

با کمی سرچ به یه راه حل رسیدیم و اونم این بود که:

قراره دادن متغیر ها داخل یک object که در window مرورگر است!

خب برای اینکه بتونیم محتوای فایل .env رو تو runtime بریزیم تو window یک فایل bash ساختیم ??

https://gist.github.com/AmirhBeigi/711cac718a655ebb44c404d12205b925

این فایل میاد محتوا env رو میریزه تو یه فایل js به نام env-config.js

چهار تا امکان به این فایل اضافه کردم:
- اگر فایل‌ env.local. وجود داشت مقادیرش رو override کنه رو مقادیر env.
- اگر خطی کامنت شده بود ازش رد بشه.
- فقط متغیری رو استخراج کنه که با کلمه PUBLIC شروع شده باشه برای اینکه اگر نیاز نبود متغیری در runtime عوض بشه و نمیخواستیم داخل _window._env باشه.
- اگر از true/false استفاده شده بود اون رو به صورت boolean ذخیره میکنه.

این فایل چه موقع و به چه صورت باید اجرا کرد؟

فایل env.sh رو در Root پروژه قرار می دهیم و برای محیط دولوپمنت که میخواهیم کد بزنیم در فایل package.json این تغییر رو برای اسکریپت start می دهیم.

برای اینکه متوجه بشین چطوری از این راه حل در Dockerfile استفاده کنید این لینک بهتون کمک میکنه.

https://www.freecodecamp.org/news/how-to-implement-runtime-environment-variables-with-create-react-app-docker-and-nginx-7f9d42a91d70/

استفاده ازش چطوریه؟

فایلی که کپی کردیم داخل پوشه Public رو داخل index.html ایمپورت میکنیم و هر وقت از متغیر های پابلیک env میخواییم استفاده کنیم از _window._env استفاده میکنیم.

تمام :)


امیرحسین بیگی | 15 فروردین 1401
GitHub | LinkedIn

envفرانت اندfrontendjavascriptreact
برنامه نویس فرانت اند - amirhbeigi.ir
شاید از این پست‌ها خوشتان بیاید