我已经将我们的旧移动的应用程序转换为最新版本的expo。看到许多东西已经被弃用,包括expo publish
,我现在正在将eas build
集成到我的工作流程中
在我之前的代码中,我一直在使用Updates.releaseChannel
作为我的env特定配置。请参见下面的代码:
export function getEnvConst() {
if (Updates.releaseChannel.startsWith("prod")) {
return { apiUrl: "https://prodUrl.com/" };
} else if (Updates.releaseChannel.startsWith("staging")) {
return { apiUrl: "https://stagingUrl.com/" };
} else if (Updates.releaseChannel.startsWith("uat")) {
return { apiUrl: "https://uatUrl.com/" };
} else {
return { apiUrl: "https://devUrl.com/" };
}
}
我可以通过以下命令选择通道:
expo publish --release-channel prod
expo publish --release-channel uat
expo publish --release-channel staging
这个设置允许我基于releaseChannel切换ApiUrl
,同时,在开发期间(npm start
),else
语句启动以使用dev url运行(因为没有发布通道)
我似乎无法使用eas build
复制此设置。我尝试的是添加eas.json
并添加一堆profile和一堆env。这些env似乎也无法访问javascript代码?
我尝试的是:
1.添加配置文件并使用channel
。字面上使用了上面相同的getEnvConst
函数,并将releaseChannel
替换为channel
。channel
似乎不工作。我使用以下命令发布eas build -p android --profile staging
eas.json
包含以下内容:
{
"cli": {
"version": ">= 3.8.1"
},
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": {
"resourceClass": "m-medium"
},
"channel": "dev",
},
"staging": {
"android": {
"buildType": "apk"
},
"ios": {
"resourceClass": "m-medium"
},
"channel": "staging",
},
"uat": {
"distribution": "internal",
"ios": {
"resourceClass": "m-medium"
},
"channel": "uat",
},
"production": {
"ios": {
"resourceClass": "m-medium"
},
"channel": "production",
}
},
"submit": {
"production": {}
},
}
1.尝试在eas.json
中添加env
。但是这个export const apiUrl = process.env.API_URL
似乎无法通过npm start
获取值。还没有在eas build
中测试它,因为测试需要很多时间。
{
"cli": {
"version": ">= 3.8.1"
},
//Remove other sections for brevity
"build": {
"development": {
"developmentClient": true,
"distribution": "internal",
"ios": {
"resourceClass": "m-medium"
},
"channel": "dev",
"env": {
"API_URL": "http://devUrl.com/"
}
},
"production": {
"ios": {
"resourceClass": "m-medium"
},
"channel": "production",
"env": {
"API_URL": "https://prodUrl.com/"
}
}
},
"submit": {
"production": {}
},
"development": {
"client": "local"
},
"env": {
"development": {
"API_URL": "https://devUrl.com/"
}
}
}
老实说,我对这一切都很困惑,即使在阅读了文档之后,我也不想承认这花费了我很多时间。似乎我错过了文档假定我知道的expo的基本原理,所以它所说的与我无关。
1条答案
按热度按时间dbf7pr2w1#
我能够继续我想发生的事情。
这个SO答案解决了我的问题。它说我需要先添加一个
branch
,然后使用以下命令将我的channel
链接到它:之前让我感到困惑的是,每当我运行
eas build -p android --profile staging
时,它都不会显示任何警告或错误,只是成功完成。这让我错误地认为我的配置文件的channel
应该生效。在创建branch
并将我的通道链接到它之后,Updates.channel
现在包含eas.json
中的通道。然而,每当我运行
eas update --channel staging --platform android
时,Updates.channel
仍然为null。我只是在执行eas update
时注解/取消注解了else
的返回,目前可以使用。似乎没有直接替代
expo publish
和releaseChannel
之前使用的方式。我的
eas.json
仍然与以前类似: