実行時環境変数
12965 ワード
反応としては、ブラウザのランタイム環境内の静的なページとして実行される単一のページアプリケーション(SPA)とブラウザの中には、スパで使用できるランタイム変数のようなものはありません.しかし、我々は反応アプリケーションで動的な環境変数を実装することができるいくつかのハッキングがあります.
しかし、問題は、静的なページのためにランタイム変数を必要とする理由です?まあ、私の経験では、いくつかの場合は、我々は反応のアプリでランタイムや動的変数を探すために、または任意のスパのための事実のために事実があります.例えば、ローカルAPI、プリプロード、およびプロダクションのための異なるAPIエンドポイント、pre - prodとprodのための異なるAPIキーと同様に.
ローカル開発に着手するための設定はほとんどありません. 環境ファイル bashスクリプト NPMスクリプト パブリック/インデックスにスクリプトタグを含める.HTML 実行時変数が必要なスクリプト
1 .環境ファイル
envを作成します.preprod file/public/env/location/public/env/envにこのファイルを作成します.予言する
これはランタイム環境変数が格納されるファイルで、ファイルに複数の変数が存在する可能性があります.パブリックディレクトリの下でなぜですか?ビルドプロセス中にtarballにバンドルされるので
bashスクリプト
実行中のスクリプト
ファイル名: env .sh
NPMスクリプト
これは、
4 . public/indexにスクリプトタグを含める.HTML
env configこれまで作成されたJSはインデックスにロードする必要があります.HTML、それ以外は使用できません.ENV設定時.ブラウザのウィンドウオブジェクトにランタイム変数が割り当てられます.
実行時変数が実際に使用されるスクリプト
そして今、これまで行われたすべてのハードワークについては、ランタイム変数を使用して/使用する時間です.変数はウィンドウオブジェクトとして割り当てられているので、今私たちは望む方法を使うことができます.これは、バニラJSファイルや反応アプリJSX/TSXファイルで使用することができます.チェックアウトSample Code
捕食する 展開中にスクリプトを実行する ロケーション.conf ( nginxの使用時)
展開中にスクリプトを実行する
スクリプトを実行する
ファイル名: preprod展開.sh
2 .場所conf ( nginxの使用時)
NGNXサーバがWebサーバとして使用されるとき、ENV Configへのアクセスを許可します.jsファイル.
ファイル名:場所.conf
生産のために
1 .デフォルトのENV設定を作成します.js
既定の作成は、生産展開中に必要な手順を設定する努力を減らします.しかし、もし我々が望むなら、envのような別のenvファイルを作ることができます.プロシージャ展開中に同じを実行して実行します.しかし、これは完全にあなた次第です!
ファイル名: ENV設定.js
サンプルコード
このブログで紹介されているコードスニペットはGithubにあります.Sample Code . 場合は、ファイルに興味を持っている場合は、チェックアウトGitHub Gist
あなたがここに達したならば、私はあなたを読書させ続けるのに十分な努力をしました.任意のコメントを残したり、任意の修正を求める親切にしてください.ハッピーコーディング!
参照: https://www.freecodecamp.org/news/how-to-implement-runtime-environment-variables-with-create-react-app-docker-and-nginx-7f9d42a91d70/
他のブログ
しかし、問題は、静的なページのためにランタイム変数を必要とする理由です?まあ、私の経験では、いくつかの場合は、我々は反応のアプリでランタイムや動的変数を探すために、または任意のスパのための事実のために事実があります.例えば、ローカルAPI、プリプロード、およびプロダクションのための異なるAPIエンドポイント、pre - prodとprodのための異なるAPIキーと同様に.
ローカル開発に着手するための設定はほとんどありません.
1 .環境ファイル
envを作成します.preprod file/public/env/location/public/env/envにこのファイルを作成します.予言する
これはランタイム環境変数が格納されるファイルで、ファイルに複数の変数が存在する可能性があります.パブリックディレクトリの下でなぜですか?ビルドプロセス中にtarballにバンドルされるので
//Filename: env.preprod
REACT_APP_RUNTIME_PREPROD_KEY=xyz
bashスクリプト
実行中のスクリプト
npm start
ローカルの場合、env configを作成します.ENVからのコンテンツ付きのJS.展開中にpreprodファイルとpre - prodに同じです.prodについては、デフォルトのENV設定を行います.jsファイル.ファイル名: env .sh
#!/bin/bash
# look for runtime env file
if [ ! -z "${2}" ]; then
envFile="${1}"/env."${2}"
fi
#If can't find it then exit
if [[ ! -f "$envFile" ]]; then
echo "Env file doesn't exist!"
exit 1;
fi
# create runtime env JS file
if [[ ! -z "${1}" ]]; then
envJs="${1}/env-config.js"
fi
#Recreate config file
rm -rf ${envJs}
touch ${envJs}
# Add assignment
echo "window._env_ = {" >> ${envJs}
# Read each line in .env file
# Each line represents key=value pairs
while read -r line || [[ -n "$line" ]];
do
# Split env variables by character `=`
if printf '%s\n' "$line" | grep -q -e '='; then
varname=$(printf '%s\n' "$line" | sed -e 's/=.*//')
varvalue=$(printf '%s\n' "$line" | sed -e 's/^[^=]*=//')
fi
# Read value of current variable if exists as Environment variable
value=$(printf '%s\n' "${!varname}")
# Otherwise use value from .env file
[[ -z $value ]] && value=${varvalue}
# Append configuration property to JS file
echo " $varname: \"$value\"," >> ${envJs}
done < ${envFile}
echo "};" >> "${envJs}"
echo "generated ${envJs} with content"
cat ${envJs}
NPMスクリプト
これは、
prestart npm script
bashスクリプトを実行します.//Change in package.json file
"prestart" : "chmod +x ./public/env/env.sh && ./public/env/env.sh ./public/env preprod"
4 . public/indexにスクリプトタグを含める.HTML
env configこれまで作成されたJSはインデックスにロードする必要があります.HTML、それ以外は使用できません.ENV設定時.ブラウザのウィンドウオブジェクトにランタイム変数が割り当てられます.
<!--Change in index.html-->
<head>
<script src="%PUBLIC_URL%/env/env-config.js?d=20210529"></script>
</head>
実行時変数が実際に使用されるスクリプト
そして今、これまで行われたすべてのハードワークについては、ランタイム変数を使用して/使用する時間です.変数はウィンドウオブジェクトとして割り当てられているので、今私たちは望む方法を使うことができます.これは、バニラJSファイルや反応アプリJSX/TSXファイルで使用することができます.チェックアウトSample Code
//Filename: some-important.js
const RUNTIME_ENV_KEY = window?._env_?.REACT_APP_RUNTIME_PROD_KEY ? window._env_.REACT_APP_RUNTIME_PROD_KEY : window?._env_?.REACT_APP_RUNTIME_PREPROD_KEY;
また、いくつかの重要な含まれます.インデックスのJS.ヘッドタグ<!--Change in index.html-->
<head>
<script src="%PUBLIC_URL%/some-important.js?d=20210529"></script>
</head>
捕食する
展開中にスクリプトを実行する
スクリプトを実行する
env.sh
展開プロセスで.Dockerイメージの詳細については、最後にチェックアウトリファレンスセクション.ファイル名: preprod展開.sh
bash ./public/env/env.sh ./public/env preprod
2 .場所conf ( nginxの使用時)
NGNXサーバがWebサーバとして使用されるとき、ENV Configへのアクセスを許可します.jsファイル.
ファイル名:場所.conf
location ~ /env/(.+\.(?:js))$ {
expires -1;
add_header Cache-Control "public"
}
生産のために
1 .デフォルトのENV設定を作成します.js
既定の作成は、生産展開中に必要な手順を設定する努力を減らします.しかし、もし我々が望むなら、envのような別のenvファイルを作ることができます.プロシージャ展開中に同じを実行して実行します.しかし、これは完全にあなた次第です!
ファイル名: ENV設定.js
window._env_ = {
REACT_APP_RUNTIME_PROD_KEY=runtime-env-value
};
サンプルコード
このブログで紹介されているコードスニペットはGithubにあります.Sample Code . 場合は、ファイルに興味を持っている場合は、チェックアウトGitHub Gist
あなたがここに達したならば、私はあなたを読書させ続けるのに十分な努力をしました.任意のコメントを残したり、任意の修正を求める親切にしてください.ハッピーコーディング!
参照:
他のブログ
Reference
この問題について(実行時環境変数), 我々は、より多くの情報をここで見つけました https://dev.to/akdevcraft/react-runtime-variables-49dcテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol