Expo EAS 构建在使用“process.env.X”访问时不会暴露秘密

问题描述 投票:0回答:3

根据文档,我尝试使用 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

我想知道是否有人以前遇到过这个问题并且可能找到了解决方案?预先感谢您。

android react-native expo
3个回答
3
投票

我也遇到了同样的问题。我查看了博览会网站上的日志,我可以在“启动构建环境”部分看到秘密在构建过程中被暴露。问题是,expo 不会自动在 process.env 变量下注入秘密值。为了捕获这些值,您可以使用诸如 babel 插件之类的工具transform-inline-environment-variables


3
投票

是的,正如 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

enter image description here

然后

Create

enter image description here

最后,设置密钥的名称(与

.env
文件相同)以及生产环境所需的值。

enter image description here

就是这样!当您在本地计算机上开发时,它将使用您的

API_URL_BASE
文件中的
.env
,而当您构建应用程序时,EAS 将从机密中获取
API_URL_BASE

我希望这对你有用!有任何问题都可以提出来。问候:)


0
投票

聚会有点晚了,但我想在这里详细说明答案。我遇到了同样的问题,事实证明,如果您使用

--dev-client
运行应用程序,即使我使用 eas build 构建的应用程序,EAS 机密也不会被评估。

我没有

.env
文件。这些秘密存储在 EAS 中,但当我使用
npx expo start --dev-client
运行我的应用程序时,环境变量未定义。当我构建用于生产的应用程序时,它按预期工作。

TL;DR:如果您想使用

.env
运行您的应用程序,您需要一个
.gitignore
文件(添加到您的
--dev-client
)。

© www.soinside.com 2019 - 2024. All rights reserved.