如何向本地运行的生产模式应用传递环境变量?
解决Expo本地生产模式环境变量不生效及调试问题
环境变量不生效的修复方案
方法1:通过Expo配置文件注入变量(推荐)
这种方式更贴合Expo生态,开发/生产模式都能稳定读取变量:
- 安装
dotenv依赖:
npm install dotenv --save
- 在项目根目录的
expo.config.js中加载目标.env文件,并将变量配置到extra字段:
require('dotenv').config({ path: '.env.production.local' }); module.exports = { expo: { extra: { API_URL: process.env.API_URL, // 按需添加其他需要的环境变量 }, // 保留项目原有配置 }, };
- 在代码中通过
expo-constants读取变量:
import Constants from 'expo-constants'; const apiUrl = Constants.expoConfig.extra.API_URL;
- 直接启动生产模式即可,无需依赖dotenv-cli:
npx expo start --no-dev --minify
方法2:用babel插件替换process.env
如果习惯用process.env读取变量,需要让babel在打包时静态替换变量值:
- 安装babel插件:
npm install babel-plugin-transform-inline-environment-variables --save-dev
- 修改
babel.config.js:
module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'], plugins: [ ['transform-inline-environment-variables', { include: ['API_URL', 'YOUR_OTHER_VAR'] // 列出所有需要替换的变量名 }] ], }; };
- 重新执行你的dotenv-cli命令:
dotenv -e .env.production.local -- npx expo start --no-dev --minify
方法3:命令行直接导出变量(临时方案)
无需额外工具,启动前直接在命令行导出变量:
- Bash/Zsh环境:
source .env.production.local && npx expo start --no-dev --minify
- Windows CMD环境:
for /f "tokens=*" %i in (.env.production.local) do set %i && npx expo start --no-dev --minify
生产模式崩溃调试技巧
不用每次构建应用或依赖EAS Update,你可以:
- 用
npx expo start --no-dev --minify启动本地生产模式,该模式已经模拟了生产环境的打包逻辑和运行环境 - 打开Expo开发者菜单(摇晃设备或按Ctrl+M),选择「Debug Remote JS」,通过Chrome DevTools查看崩溃调用栈、变量值等信息
- 修改代码后,只需重启上述启动命令即可,无需重新构建
内容的提问来源于stack exchange,提问作者Mike K
相关产品推荐
相关产品推荐

