react evironment variables .env return undefined

ReactjsUndefined

Reactjs Problem Overview


I am building a react app and i need to fetch data from my api, now i want to store the api url as an environment variable. I have my .env file, i have dotenv installed, here is my code process.env.API_URL is returning undefined.

import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Home from '../src/components/Home'
import dotenv from  'dotenv'
import path from 'path'


class App extends Component {
  render() {
    console.log(process.env.API_URL)
    return (
      <div>
        <Home/>
      </div>
    );
  }
}

export default App;

Reactjs Solutions


Solution 1 - Reactjs

Three things to note here

  1. the variable should be prefixed with REACT_APP_

    eg: REACT_APP_WEBSITE_NAME=hello

  2. You need to restart the server to reflect the changes.

  3. Make sure you have the .env file in your root folder(same place where you have your package.json) and NOT in your src folder.

After that you can access the variable like this process.env.REACT_APP_SOME_VARIABLE

Additional tips

  1. No need to wrap your variable value in single or double quotes.
  2. Do not put semicolon ; or comma , at the end of each line.

Read more here(my own post) and the official docs

Solution 2 - Reactjs

You will probably need to call dotenv.config() as suggested by the document

If you are using create-react-app, you don't need dotenv package. You will need to add REACT_APP_ prefix to the variable name in .env file. See the document here

Solution 3 - Reactjs

  • Add prefix REACT_APP_ on React environment variables.

      apiKey: process.env.REACT_APP_API_KEY
    
  • Make sure .env file is in the root directory.

      src/
      .env
      .gitignore
      package.json
      package-lock.json
    
  • Restart the development server after making changes in .env file.

  • Copy only the value inside the quotation marks and don't forget to remove trailing commas(It haunted me for several hours). These examples will give you an error.

      REACT_APP_API_KEY=Ach2o1invVocSn25FcQhash209,
      REACT_APP_API_KEY="Ach2o1invVocSn25FcQhash209",
      REACT_APP_API_KEY="Ach2o1invVocSn25FcQhash209"
    

Solution 4 - Reactjs

when calling a .env variable from a JS file you need to call it by process.env. prefix before you write the .env variable

thus it would look like process.env.REACT_APP_NOT_SECRET_CODE

and do not forget to start your variable name by REACT_APP_ prefix as mentioned in previous answers, otherwise react will ignore it for security reasons.

Solution 5 - Reactjs

  • Make sure you used the prefix REACT_APP on every variable

  • Confirm that the variable names on the .env file match the ones on
    your js file.For example,REACT_APP_KEY in .env versus process.env.REACT_APP_KY

  • If the development server was running, stop it then rerun using npm start it. I really struggled with this (variable is an undefined error).

  • Every time you update the .env file, you need to stop the server and rerun it, as the environment variables are only updated during build (variable is an undefined error).

  • Remove quotations from the values of the variables.

// Wrong: 
REACT_APP_KEY=”AHEHEHR”

// Right:
REACT_APP_KEY=AHEHEHR

Solution 6 - Reactjs

  1. restart the vscode (close the project, close the editor)
  2. open it again
  3. launch the project

In my case it help a lot. Also remember to start the name of your key with REACT_APP_YOUR_NAME_KEY

Solution 7 - Reactjs

If the above solutions don't work for you then please check where is your ".env" file place. Like in my case everything I had done correctly but the mistake is I had placed the ".env" outside my project directory due to which I'm getting error.

Note: Your ".env" file should be in the same directory in which your "package.json" is.

Solution 8 - Reactjs

Hey thanks guy what i did and worked was create a config.js file

 const dev={
    API_URL:"http://localhost:300"
}

const prod={
    API_URL:"llll"
}
const config=process.env.NODE_ENV=='development'?dev:prod
export default  config

Then i import wherever maybe in a component and get my data.

Solution 9 - Reactjs

Another possible trap in which I fell was to define the variables not under the create-react-app folder but one above(where the Node server/backend .env is located). Make sure you don't do that because you will waste precious time, as I did today.

Solution 10 - Reactjs

try by clearing the cache also.

npx react-native start --reset-cache

Solution 11 - Reactjs

In my case I started with naming the file process.env. As it happen and as the doc clearly states, the file should simply be named .env

Solution 12 - Reactjs

FIX:

in babel.config.js, if you're using the optional configuration:

    {
  "plugins": [
    ["module:react-native-dotenv", {
      "moduleName": "@env",
      "path": ".env",
      "blacklist": null,
      "whitelist": null,
      "safe": false,
      "allowUndefined": true
    }]
  ]
}

you should then import:

import {API_URL, API_TOKEN} from "@env"

instead of:

import {API_URL, API_TOKEN} from "react-native-dotenv"

the NPM Package description itself has this inconsistency

Solution 13 - Reactjs

DO NOT STORE OR USE API KEYS IN FRONTEND CODE SINCE IT IS EASILY READABLE THROUGH DEV TOOLS

Saving API keys in .env and using them in your React app will still be unsecured since the API key can be read from DevTools.

Use some simple backend code that will act as a proxy to your service.

Send required data through a request and then the backend should use that data including the API key stored on the backend, and then make a request to some particular service that needs that API key.

Solution 14 - Reactjs

No need to prefix it with REACT_APP_, just identify your environment -

  • if you are on development environment (npm start), you should be adding an environment variable in .env.development like - API_URL=http://example.com
  • if you are on production environment, updating .env should work

Then use the same in your JS file as process.env.API_URL

Note: I've tested this on React JS v16.8

Solution 15 - Reactjs

Solution:
1.Remove double quotation.("...").
2.Prefix Must be REACT_APP on every variable.

Right way:

REACT_APP_API_URL=http://localhost:8002

I hope its work.

Solution 16 - Reactjs

If you are using dev server on localhost know this that .env doesn't work here, you need to deploy website on "normal" server, it is a safety reason to not allow browser to see .env in staging

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavid whyteView Question on Stackoverflow
Solution 1 - ReactjskiranvjView Answer on Stackoverflow
Solution 2 - ReactjstingxuanzView Answer on Stackoverflow
Solution 3 - ReactjsThanapooom PtjrkView Answer on Stackoverflow
Solution 4 - ReactjsSafi HabhabView Answer on Stackoverflow
Solution 5 - Reactjsakshay TiwariView Answer on Stackoverflow
Solution 6 - ReactjsMagdaView Answer on Stackoverflow
Solution 7 - ReactjsAlok MishraView Answer on Stackoverflow
Solution 8 - ReactjsDavid whyteView Answer on Stackoverflow
Solution 9 - ReactjsCyberMessiahView Answer on Stackoverflow
Solution 10 - Reactjssuranga upulView Answer on Stackoverflow
Solution 11 - ReactjsJohannView Answer on Stackoverflow
Solution 12 - ReactjsEd Ouard Chichombah700View Answer on Stackoverflow
Solution 13 - ReactjsНикола КараклићView Answer on Stackoverflow
Solution 14 - ReactjsTushar WalzadeView Answer on Stackoverflow
Solution 15 - ReactjsSafaetul Ahasan PiyasView Answer on Stackoverflow
Solution 16 - ReactjsMariusz SidorowiczView Answer on Stackoverflow