You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

部署Nuxt 3+VueFire应用至Firebase后遇凭据文件读取错误

问题

将Nuxt 3应用部署到Firebase后出现以下错误:

Error: Failed to read credentials from file service-account.json: Error: ENOENT: no such file or directory, open 'service-account.json'
  at .readCredentialFile ( /workspace/node_modules/firebase-admin/lib/app/credential-internal.js:507 )
  at .credentialFromFile ( /workspace/node_modules/firebase-admin/lib/app/credential-internal.js:480 )
  at .getApplicationDefault ( /workspace/node_modules/firebase-admin/lib/app/credential-internal.js:401 )
  at .AppStore.initializeApp ( /workspace/node_modules/firebase-admin/lib/app/lifecycle.js:34 )
  at .initializeApp ( /workspace/node_modules/firebase-admin/lib/app/lifecycle.js:102 )
  at undefined. ( file:///workspace/node_modules/firebase-frameworks/dist/firebase-aware.js:10 )
  at .ModuleJob.run ( node:internal/modules/esm/module_job:195 )

使用Nuxt 3 + VueFire开发,已在.env中设置GOOGLE_APPLICATION_CREDENTIALS=service-account.json,项目根目录也存在内容正确的service-account.json文件,但部署后Cloud Function日志仍报上述错误,网站返回500错误,怀疑是构建/部署时环境变量或文件丢失。

项目创建流程:

  1. 通过npx nuxi@latest init <project-name>初始化Nuxt项目
  2. 执行firebase init关联Firebase项目
  3. 按照VueFire官方文档配置(包括认证部分),下载服务账户文件并命名为service-account.json放在根目录,配置.env环境变量

解决方案

1. 检查文件是否被部署忽略

  • 查看项目根目录的.gitignore文件,确认是否包含service-account.json规则,如果有,要么移除该规则,要么改用Firebase Secrets管理凭证(更安全)
  • 检查firebase.json中的functions配置,确认是否设置了ignore规则排除了该文件

2. 改用环境变量注入凭证内容(替代文件路径)

将service-account.json的内容转为Base64编码,在Firebase控制台的项目设置 > 环境变量中添加新变量(如FIREBASE_ADMIN_CREDENTIALS),值为Base64后的内容。

修改Nuxt配置:

// nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    firebaseAdminCredentials: process.env.FIREBASE_ADMIN_CREDENTIALS,
  },
})

服务端初始化代码调整:

import { initializeApp, cert } from 'firebase-admin/app'

const credentials = JSON.parse(Buffer.from(process.env.FIREBASE_ADMIN_CREDENTIALS!, 'base64').toString())
initializeApp({ credential: cert(credentials) })

3. 确认Firebase环境变量已正确上传

  • 运行firebase functions:config:get检查是否能获取到设置的环境变量
  • 若使用本地.env,可执行firebase functions:config:set env.google_application_credentials="$(cat service-account.json | base64)"同步到Firebase,或直接在控制台手动添加

4. 配置Nuxt runtimeConfig隔离环境变量

确保凭证相关变量被注入到服务端可用的runtimeConfig中(Nuxt 3客户端与服务端环境变量隔离):

// nuxt.config.ts
export default defineNuxtConfig({
  runtimeConfig: {
    // 仅服务端可访问
    googleApplicationCredentials: process.env.GOOGLE_APPLICATION_CREDENTIALS,
    public: {
      // 客户端可访问变量(无需放置凭证)
    }
  }
})

5. 使用Firebase默认凭证(推荐)

在Firebase Functions环境中,无需手动提供服务账户文件,平台会自动注入默认凭证。修改初始化代码:

import { initializeApp } from 'firebase-admin/app'

// 直接初始化,无需指定cert参数
initializeApp()

此方式会自动使用Firebase内置的服务账户权限,彻底避免文件路径相关问题。


内容的提问来源于stack exchange,提问作者starleaf1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 02:52:49