Create-react-appで次の環境変数を使用しています。
console.log(process.env.REACT_APP_API_URL) // http://localhost:5555
npm start
ファイルを読み取って.env
を実行すると動作します。
REACT_APP_API_URL=http://localhost:5555
http://localhost:1234
を実行するときに、npm run build
などの別の値を設定するにはどうすればよいですか?
これは私のpackage.json
ファイルです:
{
"name": "webapp",
"version": "0.1.0",
"private": true,
"devDependencies": {
"react-scripts": "0.9.0"
},
"dependencies": {
"react": "^15.4.2",
"react-dom": "^15.4.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test --env=jsdom",
"eject": "react-scripts eject"
}
}
process.env.NODE_ENV
は次のように使用できます。
const apiUrl = process.env.NODE_ENV === 'production' ? process.env.REACT_APP_PROD_API_URL : process.env.REACT_APP_DEV_API_URL;
REACT_APP_PROD_API_URL
とREACT_APP_DEV_API_URL
を設定する必要があります。
または、実稼働URLが常に同じである場合は、単純化できます。
const apiUrl = process.env.NODE_ENV === 'production' ? 'https://example.com' : process.env.REACT_APP_DEV_API_URL;
Create React Appは、ビルド時にNODE_ENV
を 'production'に設定するため、いつ本番に設定するかを心配する必要はありません。
注:環境変数の変更を検出するには、サーバーを再起動する必要があります(たとえば、npm start
を再度実行する)。
これで動作するようになったと思いますが、これを見つけた人は誰でも、「create-react-app」プロジェクトのルートにある.env
ファイルにデフォルトの環境変数を設定します。
npm start
とnpm run build
を使用するときに使用される変数を分離するには、.env.development
と.env.production
の2つのenvファイルを作成します。
npm start
はREACT_APP_NODE_ENV
をdevelopment
に設定するため、.env.development
ファイルを自動的に使用し、npm run build
はREACT_APP_NODE_ENV
をproduction
に設定し、自動的に使用します.env.production
。これらで設定された値は、.env
の値を上書きします。
他の人と一緒に作業していて、マシンのみに固有の値がある場合、.env.development
および.env.production
の値を新しいファイルに追加することで上書きできます-.env.development.local
および.env.production.local
それぞれ。
EDIT:設定した環境変数は、たとえば「REACT_APP_」で始まる必要があることを指摘する必要があります。 「REACT_APP_MY_ENV_VALUE」。
EDIT 2:開発や生産以上のものが必要な場合は、 env-cmd を使用します。 this comment で指定します。
別々の環境(ステージ、prod)を構築および/またはデプロイするために個別のdotenvファイルが必要な場合、 env-cmd を次のように使用できます。
npm install --save-dev env-cmd
./node_modules/.bin/env-cmd -f ./stage.env npm build
次に、それに応じてpackage.json
を更新します。
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject",
"build:stage": "env-cmd -f ./.env.stage npm run-script build"
},
次に、ビルドするには、次のシェルコマンドを実行します。
npm run build:stage