I'm using the following environment variable in my create-react-app:
console.log(process.env.REACT_APP_API_URL) // http://localhost:5555
It works when I run npm start
by reading a .env
file:
REACT_APP_API_URL=http://localhost:5555
How do I set a different value like http://localhost:1234
when executing a npm run build
?
This is my package.json
file:
{ "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" } }
Method 1: Using npm scripts to set environment variables Let's add some environment variables with a --env flag in our scripts. We've added the --env. API_URL= part in both scripts. Now, run your npm run dev command, go to your React component and use the process.
I imagine you got this working by now, but for anyone else that finds this, you set your default environment variables in a .env
file at the root of your "create-react-app" project.
To separate out the variables used when using npm start
and npm run build
you can create two more env files - .env.development
and .env.production
.
npm start
will set REACT_APP_NODE_ENV
to development
, and so it will automatically use the .env.development
file, and npm run build
sets REACT_APP_NODE_ENV
to production
, and so it will automatically use .env.production
. Values set in these will override the values in your .env
.
If you're working with other people, and have values specific to your machine only, you can override values in .env.development
and .env.production
by adding those values to a new file - .env.development.local
and .env.production.local
respectively.
EDIT: I should point out that the environment variables you have set must start with "REACT_APP_", eg. "REACT_APP_MY_ENV_VALUE".
EDIT 2: if you need more than just development, and production, use env-cmd, as specified by this comment.
You can use the process.env.NODE_ENV
like so:
const apiUrl = process.env.NODE_ENV === 'production' ? process.env.REACT_APP_PROD_API_URL : process.env.REACT_APP_DEV_API_URL;
You would need to have REACT_APP_PROD_API_URL
and REACT_APP_DEV_API_URL
set.
Or, if the production URL is always the same, you could simplify it:
const apiUrl = process.env.NODE_ENV === 'production' ? 'https://example.com' : process.env.REACT_APP_DEV_API_URL;
Create React App sets the NODE_ENV
to 'production' for you on build, so you don't need to worry about when to set it to production.
Note: you must restart your server (e.g. run npm start
again) to detect environment variable changes.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With