Next JS env variables not working in production - reactjs

According to Next.js documentation, you need to declare your env variables in next.config.js under env key to read them at build time:
env: {
GOOGLE_ANALYTICS_ID: process.env.GOOGLE_ANALYTICS_ID
},
This is working correctly in my local environment, the variables are hidden from _NEXT_DATA and I can still access them from the client. The problem is when deploying the application for production, it can no longer read from process.env. Has anyone encountered this issue?
Note: I don't want to expose sensitive data. Will adding the NEXT_PUBLIC_ prefix to the env variables expose them to _NEXT_DATA as well?

You should store your env variables in .env (for Next.js versions 9.4 and up) file like it's shown here. In case you are deploying to Vercel refer to this guide

Related

Environment variables with Vite React-ts and Vercel

I'm using ViteJS with React-ts template and i want to make deploy in Vercel using environment variables, locally i use "import.meta.env.VITE_XXX" and it works with my file .env, but when the application has ben deployed in the Vercel it doesn't works (I'm declared the environment variable in the Vercel configs), follow the example of use at environment variable in my code locally.
const urlApi = import.meta.env.VITE_VERCEL_XXX
When i run in localhost the value is equal my .env file
When i run in Vercel the value is undefined
I read the docs of vite and vercel, but didn't found the solution
I'm expecting another resolution or one direction to resolve the problem
I wonder what value you have set for local.
In my case, the path is set to root, i.e. localhost:3000. This path is set automatically from node env by default.
If I deploy the application to the server and the address is no longer root (i.e. "google.com/"), but is in some other nested folder, I have to set "PUBLIC_URL" in the .env where the entire server address is to the root of the application, for example. "https://www.server.com/app/dev/".
I use a custom .env file to set the PUBLIC_URL
.env.develop
VITE_VERSION=dev
PUBLIC_URL=https://server.com/myproject/develop/stats/app/
It is also necessary to set the base url in vite.config.ts
In the configuration, this is the "base" property
export default defineConfig({
envDir: './buildConfig/environments',
plugins: [react()],
base: process.env.PUBLIC_URL,
build: { outDir: process.env.BUILD_PATH },
});
Also, is it possible that the build is not reading the correct .env file?
If I have created my own file, I define the path to it using envDir, see above. and during the build I define the mode parameter in the script. for example, to build a develop environment with an .env.develop file, it would be vite --mode develop build vite will then take this .env.
Hopefully at least something will lead to success
In your Vercel Project settings, you have to add the exact same values as in your .env file:
key: VITE_YOUR-KEY
value: yourApiKey
Then check the environments you want your variables to be used (Production, Preview and/or​ Development)

How do I use Config Vars in Heroku to get my API key to work?

So I have .env added to my .gitignore and in my .env file I have
REACT_APP_WEATHER_API_KEY=123456
This was a recent add on, I already have this app fully deployed and working on Heroku. Do I just go to settings => Config Vars and add key=REACT_APP_WEATHER_API_KEY and value=123456? How would I go about implementing my API key into Heroku within the settings?
You don't need key= or value=, just set REACT_APP_WEATHER_API_KEY to 123456 directly, either via heroku config:set:
heroku config:set REACT_APP_WEATHER_API_KEY=123456
or the dashboard.
The .env file you're using in development and Heroku's config vars are both just convenient ways of setting environment variables:
Config vars are exposed to your app’s code as environment variables. For example, in Node.js you can access your app’s DATABASE_URL config var with process.env.DATABASE_URL.
As long as you are using the REACT_APP_WEATHER_API_KEY environment variable when your React application builds, or at runtime from your back-end (if you have one), you should be in business.

Use of environment variables with Netlify and React(Gatsby)

I'm using env variables in my react app, so I don't expose my private API keys publicly. They are set in a .env file (which is excluded from git) like so - REACT_APP_ENV_NAME which works fine during development.
I have added those to the Netlify env configuration from within the site settings panel, but they don't seem to work during production (just showing as undefined). Have any of you had the same problem before/managed to fix it?
You need to use GATSBY_ prefix in your environment variables. So, your REACT_APP_ENV_NAME will be GATSBY_REACT_APP_ENV_NAME in your Netlify back office.
You can check for further information in Gatsby documentation, in this Netlify community thread and in Netlify documentation.
From Gatsby documentation:
Please note that you shouldn’t commit .env.* files to your source
control and rather use options given by your Continuous Deployment
(CD) provider. An example is Netlify with its build environment
variables.
GATSBY_API_URL=https://dev.example.com/api
API_KEY=927349872349798
From Netlify documentation:
Gatsby environment variables
Any environment variables prefixed with GATSBY_ will be processed by
Gatsby and made available in the browser for client-side JavaScript
access. Visit the Gatsby docs about environment variables for more
information.

How to set production environment variable in React app? (hosted on Netlify)

I was wondering how I can set environment variable in React to hid my API key?
I am hosting the app on Netlify so I am not sure if that matters. I am able to successfully do it in development but when it gets to production, the api key becomes undefined.
In my .env file when I have:
REACT_APP_API_KEY="my_api_key_etc"
In my app.js I have:
const apiKey = process.env.REACT_APP_API_KEY
when I console.log(apiKey) in development (npm start): it shows my api fine, but when in production mode (npm run build): it shows undefined.
I have already tried to create two more files like .env.development and .env.production and still that didn't work.
Also I made sure my .env files are outside of my src folder.
Do you guys think it has something to do with Netlify?
Thanks in advance!
Ideally you should be setting these variables in your dashboard instead. Head to your Project settings, and add this, and any other variables under environment:

create-react-app build/serve environment variables

Relatively new to working with react. I have an application that is working fine in local docker. I populate a bunch of REACT_APP_ environment variables by exporting them to the environment before starting the docker container.
Now, I'm trying to deploy this to a kubernetes pod by running a yarn build and then serving up the build. I see that the environment variables are available on the pod itself by looking at printenv but the application doesn't appear to be picking them up.
Is there something special with serving a production build of a react-app to get it to see the exported environment variables that I'm missing?
I don't want to embed an .env file into the built docker image for security reasons, so I'm hoping that running a react build via serve can still pick up exported REACT_APP_ environment variables that are set via kubernetes secrets.
So apparently, whenever you build a react application with npm, static files are produced that don't know anything about any environment variables you may try to inject at runtime with Kubernetes.
The article below does a good job of explaining this and why they choose to attach the environment variables to the JavaScript window object since it has application-scope available to it.
Making a React application container environment-aware at Kubernetes deployment

Resources