Firebase调用Google ML引擎模型报错:getApplicationDefault未定义
getApplicationDefault未定义错误 嘿,我之前也踩过这个坑!这个错误本质上是代码里找不到getApplicationDefault方法,大概率是依赖没装对、导入方式有误,或者运行环境存在问题,咱们一步步来排查:
1. 先检查依赖是否正确安装
首先去你的Firebase Functions目录下的package.json文件里,看看有没有@google-cloud/ml-engine和google-auth-library这两个依赖。如果没有的话,在终端里跑这两个命令:
npm install @google-cloud/ml-engine --save npm install google-auth-library --save
要是已经有了,建议把依赖更新到稳定版,避免版本兼容性问题:
npm update @google-cloud/ml-engine google-auth-library
2. 确认代码里的导入和初始化逻辑
getApplicationDefault是google-auth-library里GoogleAuth类的方法,你得确保代码里正确导入了这个模块,并且初始化方式没错。比如正确的代码片段应该是这样的:
const functions = require('firebase-functions'); const {GoogleAuth} = require('google-auth-library'); const ml = require('@google-cloud/ml-engine'); exports.processImage = functions.storage.object().onFinalize(async (object) => { // 初始化认证客户端 const auth = new GoogleAuth({ scopes: 'https://www.googleapis.com/auth/cloud-platform' }); const authClient = await auth.getApplicationDefault(); // 初始化ML Engine预测客户端 const predictionClient = new ml.v1.PredictionServiceClient({ auth: authClient }); // 后续的图片处理、预测逻辑... });
要是你之前的代码里没正确导入GoogleAuth,或者导入路径不对,就会出现“无法读取undefined的getApplicationDefault属性”这个错误。
3. 确保部署时依赖完整上传
有时候本地装了依赖,但部署时没传上去。可以试试先删除node_modules文件夹,重新安装依赖,再部署:
rm -rf node_modules npm install firebase deploy --only functions
另外,去Firebase控制台看看你的函数运行时的Node.js版本,比如如果你的依赖需要Node 16+,但函数用的是Node 14,也可能出现兼容性问题,调整成匹配的版本就行。
4. 留意部署时的警告信息
你提到部署时有警告,这些警告往往是关键线索!比如如果警告提示“缺失某个依赖”或者“版本不兼容”,一定要跟着提示去修复,很多时候就是警告里的问题导致了运行时错误。
最后检查服务账号权限
如果上面的步骤都试过还不行,就去Firebase控制台看看你的函数使用的服务账号(一般是[项目ID]@appspot.gserviceaccount.com)有没有Cloud ML Engine的调用权限,比如给它加上“ML Engine Predictor”角色,避免因为权限不足导致初始化失败。
内容的提问来源于stack exchange,提问作者user40929

