Avatar
1
hungw7 Beginner
hungw7 Beginner
Passing environment vairable to react app at runtime
.envREACT_APP_API_V1proccess.env.REACT_APP_API_V1
sẽ là giá trị được compile, làm sao để truyền biến này như một environment trong docker-compose.yaml khi runtime được ạ.
  • Answer
Remain: 5
1 Answer
Avatar
tvd12 Enlightened
tvd12 Enlightened
Anh đang hiểu là em không muốn dùng file .env nữa nhỉ? Vậy thì anh nghĩ không có cách nào. Còn nếu em vẫn muốn dùng file .env thì vẫn có cách, tuy nhiên sẽ tương đối phức tạp đó em ạ. Em cần tạo ra 1 file ví dụ script.sh, trong đó em có lưu thông tin biến, và sau đó gán biến đó vào file .env ví dụ:
Đọc biến REACT_APP_API_V1 từ environment
Ghi biến REACT_APP_API_V1 vào file .env
Để mai anh thử hỏi thêm các chuyên gia xem có cách nào khác nữa không?
  • 0
  • Reply
Vâng anh, cơ bản em đang muốn process.env sẽ lấy được value của environment trong runtime để dùng trong compose, còn như hiện tại khi em build image thì process.env nó đang lấy value khi react được build nên envrionment trong compose của em không ăn vào code.
 –  hungw7 1672217390000
Hiện tại bọn anh đang làm là cũng thông qua cái file .env này, và không được phép lưu thông tin secret ở đây, anh cũng đang tưởng tượng là em muốn làm vậy là để lưu thông tin secret nhỉ?
 –  tvd12 1672217537000
Đúng rồi anh, kiểu như em có thể bỏ trống hoặc điền nháp value vào sau đó khi compose up thì enviroment trong compose sẽ ghi đè lên biến đó.
 –  hungw7 1672218083000
Hiện tại em đang có làm là build mỗi image cho mỗi môi trường với file env khác nhau nhưng không được idea cho lắm :^))
 –  hungw7 1672218233000
Anh hỏi các chuyên gia cũng đang làm vậy em ạ
 –  monkey 1672257496000
window.__ENVwindow.__ENVprocess.envwindow.__ENV
trước xem có ko :^)) 1 sample demo của em: https://github.com/UIT-Web-Giftshop/giftshop-admin/tree/runtime-env
 –  hungw7 1672469025000
Nó cũng không khác gì cách mà em pass variable qua yaml sau đó dùng bash script để ghi vào file env cả. Thậm chí cách này cũng vấn đề khi mình dùng k8s, lúc đó em sẽ không thể biết node nào sẽ được triển khai, lúc đó thì mọi node sẽ phải được cấu hình trước để lưu variable
 –  tvd12 1672469249000
Nếu dùng pass variable từ yaml vào env thì env lại được sử dụng khi react build, nếu thế thì phải có package nào đọc env trong runtime anh nhỉ. Với k8s thì em cũng ko thấy vấn đề vì các variable theo priority yaml > env được lưu ở file config.js được inject bằng thẻ script trong index.html để tạo biến window.__ENV mỗi khi trang được load.
 –  hungw7 1672470161000