根据文档,我尝试使用 EAS CLI 和 Expo 网站为我的 Expo 应用程序创建机密:
https://docs.expo.dev/build-reference/variables/
。但是,在我使用以下命令为 Android 构建 EAS 后:eas build -p android --profile <profile_name>
,并通过我的物理 Android 设备上的安装链接运行它。
似乎当我尝试通过
process.env.VARIABLE_NAME
(通过警报)查看秘密时,它只会给我undefined
。
我想知道是否有人以前遇到过这个问题并且可能找到了解决方案?预先感谢您。
我也遇到了同样的问题。我查看了博览会网站上的日志,我可以在“启动构建环境”部分看到秘密在构建过程中被暴露。问题是,expo 不会自动在 process.env 变量下注入秘密值。为了捕获这些值,您可以使用诸如 babel 插件之类的工具transform-inline-environment-variables。
是的,正如 Jhonnatan 所说,您可以使用
transform-inline-environment-variables
插件。我会告诉你。
首先,安装依赖项。
npm install --save-dev babel-plugin-transform-inline-environment-variables
然后,将插件添加到您的
babel.config.js
文件中。它看起来像这样:
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: ['transform-inline-environment-variables'],
};
};
之后,我建议在您的项目中创建一个
.env
文件,例如,创建到 API URL 库,在本例中,用于在您的计算机中本地运行的服务器:
API_URL_BASE = http://10.0.2.2:3001
请记住,
.env
文件不应推送到 GitHub,因为这通常是我们存储敏感数据的地方。
此时,您可以直接在源代码中使用环境变量,用
process.env.API_URL_BASE
。实际上是代码中的任何位置。当您修改 babel.config.js
时,您应该始终重新启动开发服务器并清除缓存,因此请使用 npx expo start --clear
启动您的项目。
好的,但是如果我想在生产中使用另一个
API_URL_BASE
,会发生什么情况(EAS Build)
?没问题,您需要将 secret
添加到您的 EAS 项目中。
转到您的项目 (https://expo.dev/accounts/my-username/projects/my-project),然后在仪表板中选择
Secrets
。
然后
Create
。
最后,设置密钥的名称(与
.env
文件相同)以及生产环境所需的值。
就是这样!当您在本地计算机上开发时,它将使用您的
API_URL_BASE
文件中的 .env
,而当您构建应用程序时,EAS 将从机密中获取 API_URL_BASE
。
我希望这对你有用!有任何问题都可以提出来。问候:)
聚会有点晚了,但我想在这里详细说明答案。我遇到了同样的问题,事实证明,如果您使用
--dev-client
运行应用程序,即使我使用 eas build 构建的应用程序,EAS 机密也不会被评估。
我没有
.env
文件。这些秘密存储在 EAS 中,但当我使用 npx expo start --dev-client
运行我的应用程序时,环境变量未定义。当我构建用于生产的应用程序时,它按预期工作。
TL;DR:如果您想使用
.env
运行您的应用程序,您需要一个 .gitignore
文件(添加到您的 --dev-client
)。