eas-cli
eas-cli copied to clipboard
Environment variables don't seem to be detected in build
Build/Submit details page URL
https://expo.dev/accounts/jorensm/projects/app/builds/3dcb9d5c-dfb2-487d-a6e5-8ce5c65b2288
Summary
So I'm trying to add environment variables to my EAS build. I've added them in my eas.json file, like so:
But they don't seem to be detected in my build. I have a validator function that throws an error if the env variables are not set, and its throwing it in my builds, thought it works fine with Expo Go.
Managed or bare?
Managed
Environment
expo-env-info 1.2.0 environment info: System: OS: Windows 10 10.0.19045 Binaries: Node: 20.8.0 - C:\Program Files\nodejs\node.EXE Yarn: 1.22.17 - ~\AppData\Roaming\npm\yarn.CMD npm: 10.1.0 - C:\Program Files\nodejs\npm.CMD SDKs: Android SDK: API Levels: 30, 31, 33 Build Tools: 30.0.2, 30.0.3 IDEs: Android Studio: Version 2020.3.0.0 AI-203.7717.56.2031.7678000 npmPackages: @expo/webpack-config: ^19.0.0 => 19.0.0 expo: ~49.0.15 => 49.0.21 expo-router: ^2.0.0 => 2.0.14 react: 18.2.0 => 18.2.0 react-dom: 18.2.0 => 18.2.0 react-native: 0.72.6 => 0.72.6 react-native-web: ~0.19.6 => 0.19.10 Expo Workflow: managed
expo-doctor didn't find any issues
Error output
No response
Reproducible demo or steps to reproduce from a blank project
This is the file that loads my env variables. On Expo Go it doesn't throw an error but on a EAS build it does.
// Constants from environment variables
const ENV_VARIABLE_NAMES = [
'API_URL',
'STRIPE_PUBLISHABLE_KEY',
'SUPABASE_URL',
'SUPABASE_KEY'
]
const validateEnvVariables = () => {
const missing_vars = []
for(const var_name of ENV_VARIABLE_NAMES) {
const full_var_name = 'EXPO_PUBLIC_' + var_name
if(!process.env[full_var_name]) {
missing_vars.push(full_var_name)
}
}
if (missing_vars.length > 0) {
throw new Error('Missing the following environment variables: ' + missing_vars.join(', '))
}
}
validateEnvVariables();
export const API_URL = process.env.EXPO_PUBLIC_API_URL!;
export const SUPABASE_URL = process.env.EXPO_PUBLIC_SUPABASE_URL!;
export const SUPABASE_KEY = process.env.EXPO_PUBLIC_SUPABASE_KEY!;
export const STRIPE_PUBLISHABLE_KEY = process.env.EXPO_PUBLIC_STRIPE_PUBLISHABLE_KEY!;
Apparently Expo only supports dot notation for accessing env variables. Which is strange because it worked with Expo Go. I'll try changing the validator to use dot notation and report back.
Update: After changing my validator to use dot notation, I'm still getting the same error about missing env vars
When I run the build command it does show in the CLI that the env variables were added:
Whereas in my EAS build logs, under Spin up build envrionment it doesn't show the env variables (though I'm not sure if it should)
Hi there,
I wanted to check your build logs, but they are expired. Are you still facing this issue? If so may I ask you to run the build once again and send me the link?
@szdziedzic I'm not working on this project anymore as my client decided to pivot, but I'll try to re run the build when I have some free time
Can confirm this a real issue I am facing.
I am having the same issue as well
Also having the same issue except i can actually see them in the spin up build environment step. However when i publish my app, they are not there.
Hello was this solved. I have the same issue. It works fine in expo go but when I run a dev build they are all undefined.
Has anyone found a solution to this issue yet ?
I had a similar issue, while doing local eas build. Everything looks to be working well with expo builds, but fails during eas local builds.
It appears that I needed to set the environment variables for the execution of build command. So, here is what I did -
- created a bash script
set-env.sh(It reads your .env file, and sets the environment)
#!/bin/bash
if [ $# -lt 1 ]; then
echo "Usage: $0 <command>"
exit 1
fi
(env $(cat .env | xargs) "$@")
- Run -
sh set-env.sh eas build --profile test --platform ios --local