再構築せずに動的に環境変数を変更する方法
9315 ワード
あなたは、複数の環境に反応アプリケーションを展開する必要がありますか?
あなたがこれまでにしなければならなかったならば、このシナリオはあなたに慣れているかもしれません:あなたはすでに既存のビルドファイルを持っています、あなたは若干の環境変数を変えたいです、そして、それを新しい環境に再配備してください.
残念ながら、環境変数はビルドファイル内でハードコード化されていることがわかります.つまり、再構築せずに環境変数を変更することはできません.
環境変数を変更する方法はありますか?
我々は、他のプロジェクトがそれを扱うより良い方法を持っているかどうかについて、まわりで尋ねました.別のチームが独自のアプローチを持っていることがわかった. 一部のチームは、単にそれぞれの環境のためにそれを再構築 一部のチームは外部データソースから非同期的に環境変数を取得しました つのチームは、アプリケーション内のすべての環境変数を格納し、URLに基づいて環境を選択した 一つのチームはプレースホルダ環境変数を保存し、ファイルを 理想的な流れはどんなものでしょうか?
上記のすべては、我々が意志がそうしなかった特定のトレードオフを持ちました.私たちは、以下を満たす何かを構築しようと思っていました 再構築を必要としない 必要最小限のコード変更 環境変数の同期アクセスを許可する 簡単に現在のワークフローと統合する シンプルで簡単な
はENV : スタティックファイルがビルドされた後に環境変数を変更できるツール
短く簡単な説明は、
使い方はこちら インレットインジェクト
6 .環境変数を以下のコマンドで設定します.
これらの変数は、実行時にアプリケーションによって読み込まれます.
そして、それはあなたが完了です!
環境変数を再度変更する必要がある場合は、次のいずれかを繰り返すことができます
<挿入ツール>については?
このユーティリティは、できるだけ簡単なので、統合する必要がありますし、他のほとんどのツールで動作するように構築されました.
env/dotenv
注意:コマンドラインを通過した環境変数は
タイプスクリプト
ステップ単位で、ファイル名を
EINVにもインプレッションインレットを
概要
このパッケージは、大いに我々のワークフローを強化して、10分以上によって我々の構築と配備時間を切りました.過去に、我々は4 x回を構築しなければなりませんでした-一度、各々の環境のために-しかし、現在、我々はそれを1 xだけ構築する必要があります.展開は速く燃えている!
それは念頭に置いてシンプルで構築されたので、関係なくどのツールを使用して、あなたのワークフローの一部として統合することができる必要があります!
リンク
詳細な情報とサポートとサンプルについては、次のリンクを確認してください. Samples GitHub npm
あなたがこれまでにしなければならなかったならば、このシナリオはあなたに慣れているかもしれません:あなたはすでに既存のビルドファイルを持っています、あなたは若干の環境変数を変えたいです、そして、それを新しい環境に再配備してください.
残念ながら、環境変数はビルドファイル内でハードコード化されていることがわかります.つまり、再構築せずに環境変数を変更することはできません.
環境変数を変更する方法はありますか?
我々は、他のプロジェクトがそれを扱うより良い方法を持っているかどうかについて、まわりで尋ねました.別のチームが独自のアプローチを持っていることがわかった.
上記のすべては、我々が意志がそうしなかった特定のトレードオフを持ちました.私たちは、以下を満たす何かを構築しようと思っていました
はENV : スタティックファイルがビルドされた後に環境変数を変更できるツール
短く簡単な説明は、
env.js
ファイル名/public
フォルダ.ファイルを開始時に実行し、変数をwindow
オブジェクト.使い方はこちら
npm install react-inject-env --save-dev
yarn add react-inject-env --dev
2 .追加するindex.html
<script src='/env.js'></script>
3 .新しいファイルを作成するenv.js
次のコードをコピーします.export const env = { ...process.env, ...window['env'] }
4 .すべてのインスタンスを置き換えるprocess.env
新しく作成したenv
変数import { env } from './env'
export const App = () => {
return (
<div style={{backgroundColor: env.REACT_APP_COLOR}}>
<span>{env.REACT_APP_MAIN_TEXT}</span>
</div>
)
}
静的ファイルのビルドnpm run build
/ react-scripts build
/どのようなビルドスクリプトです.6 .環境変数を以下のコマンドで設定します.
[env variables] npx react-inject-env set
# with a black background
REACT_APP_COLOR=black REACT_APP_MAIN_TEXT="Black Background" npx react-inject-env set
# with a blue background
REACT_APP_COLOR=blue REACT_APP_MAIN_TEXT="Blue Background" npx react-inject-env set
# for windows
set REACT_APP_COLOR=navy&& set REACT_APP_MAIN_TEXT=Navy Background&& npx react-inject-env set
オープンbuild/env.js
変数が存在するかどうかを確認します.これらの変数は、実行時にアプリケーションによって読み込まれます.
そして、それはあなたが完了です!
環境変数を再度変更する必要がある場合は、次のいずれかを繰り返すことができます
build/env.js
直接.<挿入ツール>については?
このユーティリティは、できるだけ簡単なので、統合する必要がありますし、他のほとんどのツールで動作するように構築されました.
env/dotenv
react-inject-env
自動的にあなたの環境変数を検出します.env
ルートフォルダにあるファイル.注意:コマンドラインを通過した環境変数は
.env
変数.タイプスクリプト
ステップ単位で、ファイル名を
env.ts
の代わりにenv.js
declare global {
interface Window {
env: any
}
}
// change with your own variables
type EnvType = {
REACT_APP_COLOR: string,
REACT_APP_MAIN_TEXT: string,
REACT_APP_LINK_URL: string,
REACT_APP_LOGO_URL: string
}
export const env: EnvType = { ...process.env, ...window.env }
ドックEINVにもインプレッションインレットを
FROM node:16.10-slim
COPY . /app
WORKDIR /app
RUN npm install
RUN npm run build
EXPOSE 8080
ENTRYPOINT npx react-inject-env set && npx http-server build
docker build . -t react-inject-env-sample-v2
docker run -p 8080:8080 \
-e REACT_APP_COLOR=yellow \
-e REACT_APP_LOGO_URL=./logo512.png \
-e REACT_APP_MAIN_TEXT="docker text" \
-e REACT_APP_LINK_URL=https://docker.link \
react-inject-env-sample-v2
概要
このパッケージは、大いに我々のワークフローを強化して、10分以上によって我々の構築と配備時間を切りました.過去に、我々は4 x回を構築しなければなりませんでした-一度、各々の環境のために-しかし、現在、我々はそれを1 xだけ構築する必要があります.展開は速く燃えている!
それは念頭に置いてシンプルで構築されたので、関係なくどのツールを使用して、あなたのワークフローの一部として統合することができる必要があります!
リンク
詳細な情報とサポートとサンプルについては、次のリンクを確認してください.
Reference
この問題について(再構築せずに動的に環境変数を変更する方法), 我々は、より多くの情報をここで見つけました https://dev.to/eslynn/how-to-dynamically-change-your-react-environment-variables-without-re-building-55elテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol