EAS生成失败:无法解析模块/aws出口



当我使用在移动设备中运行应用程序时,我正在使用expo 43Amplify

expo run:android

我可以看到我的应用程序在手机上运行。

但当我尝试为同一创建构建时

eas build -p android

我的低于错误

Gradle build failed with unknown error. Please see logs for the "Run gradlew" phase

这里是eas-json

{
"cli": {
"version": ">= 0.46.0"
},
"build": {
"development": {
"distribution": "internal",
"android": {
"gradleCommand": ":app:assembleDebug"
},
"ios": {
"buildConfiguration": "Debug"
}
},
"preview": {
"distribution": "internal"
},
"production": {}
},
"submit": {
"production": {}
}
}

这是eas-build 的日志

[stderr]   40 | import { enableScreens } from "react-native-screens";
Error: Unable to resolve module ./aws-exports from /root/workingdir/build/App.js: 
None of these files exist:
* aws-exports(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
* aws-exports/index(.native|.android.ts|.native.ts|.ts|.android.tsx|.native.tsx|.tsx|.android.js|.native.js|.js|.android.jsx|.native.jsx|.jsx|.android.json|.native.json|.json)
40 | import { enableScreens } from "react-native-screens";
41 | import Amplify from 'aws-amplify'
> 42 | import config from './aws-exports'

我在根目录中有aws-exports.js,它适用于expo运行:android

日志中显示了根本问题:EAS构建无法解决模块./aws-exports

这有两个原因:

  • a(此文件在存储库中被忽略,因为它包含敏感数据(这是由.gitignore中的amplify进行的默认配置(
  • b( EAS在其服务器上上传存储库的副本,因此由于a(aws-exports.js不被复制。因此产生了构建错误

我使用EAS Secret功能解决了这个问题。诀窍是在一个变量中对aws-exports.js的内容进行base64编码,称为AWS_EXPORTS。这个变量可以在名为eas-build-pre-install的预安装挂钩中使用,因此我们可以告诉EAS解码该值并将其写回aws-exports.js中,这样该文件将在构建时可用。

这是通过在package.json:中添加这两个脚本来完成的

"aws-export": "echo 'Update Expo AWS_EXPORTS secret with value: nn' && cat aws-exports.js |base64"

运行aws-export脚本,然后通过世博会网站上的"秘密"选项卡或使用eas secret:create命令设置编码内容。不要忘记每次更改amplify中的内容时都要更新值,以反映aws-exports.js中的局部变化!

然后预安装挂钩将解码该值(这由EAS自动运行(:

"eas-build-pre-install": "echo $AWS_EXPORTS | base64 -d > ./aws-exports.js"

再次运行生成。

正如colinuxEAS在其服务器上上传存储库的副本,由于aws导出是.gitignore的一部分,因此它没有在服务器上上传,因此我们出现了构建错误。有关更多详细信息,请阅读colinux的答案。

这里的解决方案是在包JSON中添加这两行。

1. "aws-export": "echo 'Update Expo AWS_EXPORTS secret with value: nn' && cat aws-exports.js |base64"
2. "eas-build-pre-install": "echo $AWS_EXPORTS | base64 -di > ./aws-exports.js"

注意:步骤2中有一个小的更改。我们必须使用base64-di而不是base64-d。这是因为旧的cli无法解码换行符和其他字符。您可以在此处查看更多详细信息:解码base64:无效输入这部分解决了我发布的构建问题。我收到了更多与app:mergeReleaseResources FAILED相关的构建错误

这个链接应该在重复资源错误的情况下帮助你:重复资源错误

在解决这些错误后,您应该从EAS获得一个成功的构建。

如果你想要一个.apk文件而不是.aap。请创建一个如下所述的开发配置文件:配置配置文件以构建apks

最新更新