David J.
David J.

Reputation: 1913

can't read environment variables in create-react-app generated app

I used create-react-app to generate a node app. I changed the app.js file to look like this:

import React from 'react';
import logo from './logo.svg';
import './App.css';
let a = process.env.SOMETHING;
console.log(a)
function App() {
    console.log(process.env)
  return (
    <div className="App">
      <header className="App-header">
        <img src={logo} className="App-logo" alt="logo" />
        <p>
          Edit <code>src/App.js</code> and save to reload.
        </p>
        <a
          className="App-link"
          href="https://reactjs.org"
          target="_blank"
          rel="noopener noreferrer"
        >
          { process.env.SOMETHING }
        </a>
          </header>
          <div>The value of something: ${a}</div>
    </div>
  );
}

I would expect the a variable to reflect what I set in the environment. When I look at the console after starting the app, it is undefined, and all I see is the dollar sign where the variable should be inserted.

I've tried setting the variable in two ways. Firstly, I created a bash file called setup.bash and gave it executable permission. It looks like this:

setup.bash

export SOMETHING="boom"

Then I changed package.json to this:

{
  "name": "server",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "react": "^16.10.2",
    "react-dom": "^16.10.2",
    "react-scripts": "3.2.0"
  },
  "scripts": {
    "start": "./setup.bash && react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

When this didn't work, I tried starting the app like this:

SOMETHING=BOOM npm start

... and the environment variable remained undefined.

Can anyone see what the problem might be?

Upvotes: 7

Views: 16445

Answers (2)

ch&#226;u minh
ch&#226;u minh

Reputation: 61

It did not work for me after I set REACT_APP_API_URL=https://api.url in .env

Then I stop react-app, runnpm start and it works fine for me.

Don't forget create .env in the root directory

Upvotes: 6

Artem Arkhipov
Artem Arkhipov

Reputation: 7455

Create .env.development text file. Then you can list variables there, but all of them must start with REACT_APP_ prefix.

For example: REACT_APP_API_URL=https://api.url

You can also run the npm start command with variables declared before it:

REACT_APP_API_URL="https://api.url" npm start, but again, remember about the prefix.

Read more about environment variable for create-react-app here.

Upvotes: 29

Related Questions