EAS Build时expo-doctor执行失败,但本地运行正常求助
解决EAS Build安卓构建时
expo: Permission denied错误 问题分析
你遇到的sh: 1: expo: Permission denied是EAS远程构建容器里执行expo命令时权限不足导致的,和本地npx expo-doctor正常的情况无关——毕竟构建环境是独立的容器,和本地配置不共享。之前升级expo/eas、添加推送图标可能触发了构建环境的权限校验逻辑,才出现这个问题。
可行解决方案
1. 检查package.json脚本
看看项目package.json里有没有自定义的postinstall或其他会修改文件权限的脚本,这类脚本可能在构建时错误修改了expo命令的权限,暂时注释掉再试构建。
2. 统一Node.js版本
在项目根目录新建.nvmrc文件,写入和本地一致的Node.js版本(比如v18.17.0),让构建环境使用相同版本的Node,避免版本差异引发的权限或依赖问题。
3. 清理远程构建缓存
执行命令清理EAS的远程缓存,旧缓存可能带权限冲突:
eas build:cache:clean
4. 检查资源文件权限
你添加了推送通知图标,要确保本地资源文件夹(比如android/app/src/main/res下的图标文件)权限正常,别设成chmod 700这种过严的权限——构建环境会同步这些权限,可能导致读取失败进而触发expo-doctor异常。
5. 强制用npx执行expo-doctor
在eas.json的development配置里,显式指定doctor命令用npx执行,绕开直接调用expo的权限问题:
{ "build": { "development": { "android": { "buildType": "apk" }, "doctor": { "command": "npx expo-doctor" } } } }
6. 回退版本测试
如果是升级expo/eas后出现的问题,临时回退到之前能正常构建的版本,确认是不是新版本兼容性问题:
npm install expo@<你之前用的版本号> npm install -g eas-cli@<你之前用的版本号>
另外,本地那个“已用PowerShell却提示推荐用PowerShell”的警告,和这个构建问题关联性不大,应该是expo-cli的小bug,不用管它。
内容的提问来源于stack exchange,提问作者theoduh
相关产品推荐
相关产品推荐

