我正在嘗試建立一個 vite+react webapp,然後部署到不同的環境 並讀取.env中的變數,例如在env A: VITE_SERVER_URL=A.com/api ,env B :VITE_SERVER_URL=B.com/api
但react只會在build time讀取.env, 導致docker image在不同的環境中不可重複使用.
請問在這種情況下部署的正確做法是什麼?
這邊提供一個參考的做法,首先,將可能變動的設定都集中到一個檔案,假設是 config.js
window.APP_CONFIG = {
apiEndpoint: 'https://a.com/api'
}
將這個檔案放在 Vite project 的 public
資料夾下,並在 html 的 head 中載入
<html>
<head>
<script src="/config.js"></script>
</head>
</html>
到這邊你就可以在你的 code 中用 window.APP_CONFIG
取得這些設定
const client = createAPIClient({ url: window.APP_CONFIG.apiEndpoint })
之後 build 你會發現這個 config.js
檔原封不動的放在 dist/config.js
的位置,打包成 docker 後,你可以用 docker 的 mount 將 config.js 替換掉