EAS Build中使用环境变量和密钥
Expo中的环境变量描述了如何使用**.env文件来设置可以在JavaScript代码中内联的环境变量。Expo CLI将在您的代码中适当前缀的变量(例如,process.env.EXPO_PUBLIC_VARNAME)替换为开发机器上.env**文件中的相应环境变量值。
由于您的EAS Build作业在远程服务器上运行,这些**.env文件可能不可用。例如,如果它们列在.gitignore中或未提交到您的本地版本控制系统中,则.env文件将从上传的项目中排除。此外,您可能希望在JavaScript代码之外使用环境变量来自定义构建时的应用二进制文件,例如设置捆绑标识符或错误报告服务的私钥。因此,EAS Build允许您在eas.json**中设置每个构建配置文件的环境变量,以及不应提交到源代码控制的敏感值,通过EAS Secrets。
在eas.json中设置明文环境变量
用于应用程序代码
如果您在**.env文件中设置了本地开发变量,如环境变量指南中所述,您可以在eas.json**的构建配置文件中设置相同的变量。例如,当本地开发时,您可能会将API URL变量设置为本地后端服务器,测试时设置为测试服务器,生产构建时设置为生产服务器。
在这种情况下,您的**.env**文件可能如下所示:
EXPO_PUBLIC_API_URL=http://api.local
将所有适用的**.env文件添加到您的.gitignore**(和**.easignore**,如果您的项目有一个)文件中,以便它们不随EAS Build作业一起上传:
# 忽略所有 .env 文件
.env*
然后,您可以在eas.json的每个构建配置文件中设置相同的环境变量:
{
"build": {
"production": {
"env": {
"EXPO_PUBLIC_API_URL": "https://api.production.com"
}
},
"test": {
"env": {
"EXPO_PUBLIC_API_URL": "https://api.test.com"
}
}
}
}
任何对process.env.EXPO_PUBLIC_API_URL的引用都将根据环境替换为适用的值。
EXPO_PUBLIC_变量替换在SDK 49及更高版本中可用。
用于您的Expo配置
您可以在动态配置中使用环境变量(app.config.js),以更改应用程序的构建方式。例如,您可能希望更改测试构建的应用程序图标或简称。
在构建配置文件中设置变量:
{
"build": {
"test": {
"env": {
"APP_ICON": "./assets/icon-test.png",
"APP_NAME": "My App (Test)"
}
}
}
}
然后在app.config.js中引用该变量,为本地开发提供回退:
module.exports = {
// 如果定义了变量,则使用它,否则使用回退
icon: process.env.APP_ICON || './assets/icon.png',
name: process.env.APP_NAME || 'My App',
};
所有在eas.json构建配置文件中的环境变量在评估app.config.js时都可用。仅在应用程序代码中使用的变量使用
EXPO_PUBLIC_前缀是一个好习惯。
用于其他构建步骤
在eas.json构建配置文件中设置的任何环境变量也可用其他构建步骤。
您还可以在构建过程中动态设置环境变量。set-env可执行文件在EAS Build工作器的PATH中可用,并且可以用来设置将在下一个构建阶段中可见的环境变量。
例如,您可以在EAS Build钩子中添加以下内容,环境变量EXAMPLE_ENV将在构建作业结束之前可用。
set-env EXAMPLE_ENV "example value"
内置环境变量
以下环境变量对每个构建作业都是公开的,可以在任何构建步骤中使用。它们在本地评估app.config.js时不会设置:
CI=1\- 表示这是一个CI环境EAS_BUILD=true\- 表示这是一个EAS Build环境EAS_BUILD_PLATFORM\- 要么是android要么是iosEAS_BUILD_RUNNER\- 要么是eas-build用于EAS Build云构建,要么是local-build-plugin用于本地构建EAS_BUILD_ID\- 构建ID,例如f51831f0-ea30-406a-8c5f-f8e1cc57d39cEAS_BUILD_PROFILE\- 来自eas.json的构建配置文件名称,例如productionEAS_BUILD_GIT_COMMIT_HASH\- Git提交的哈希值,例如88f28ab5ea39108ade978de2d0d1adeedf0ece76EAS_BUILD_NPM_CACHE_URL\- npm缓存的URL(了解更多)EAS_BUILD_MAVEN_CACHE_URL\- Maven缓存的URL(了解更多)EAS_BUILD_COCOAPODS_CACHE_URL\- CocoaPods缓存的URL(了解更多)EAS_BUILD_USERNAME\- 启动构建的用户的用户名(对于机器人用户未定义)EAS_BUILD_WORKINGDIR\- 带有您项目的远程目录路径