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

Vercel部署Next.js时找不到根目录google-cloud-key.json如何解决?

问题根因

Vercel 部署 Next.js 项目时,Serverless 函数的运行目录结构和本地开发环境完全不同,且 Next.js 构建时默认只会打包必要的代码依赖,不会自动包含根目录的 google-cloud-key.json 文件,所以直接通过相对路径、__dirname 拼接路径都无法正确找到文件。

解决方案

方案一:环境变量传递密钥(推荐)

该方案无需读取本地文件,安全性更高,也是 Vercel 官方推荐的敏感信息存储方案。

  1. 复制 google-cloud-key.json 完整内容,在 Vercel 项目后台的环境变量配置页,新增服务端环境变量 GOOGLE_CLOUD_KEY_CONTENT,值为复制的JSON内容,确保该变量不暴露给客户端。
  2. 本地开发时在项目根目录的 .env.local 文件中添加同样的变量配置,且将 .env.local 加入 .gitignore 避免提交到仓库。
  3. 修改代码直接使用 credentials 参数初始化客户端,无需读取文件:
const storage = new Storage({
  projectId: 'careful-relic-319511',
  credentials: JSON.parse(process.env.GOOGLE_CLOUD_KEY_CONTENT)
});

方案二:配置文件打包规则

如果坚持使用密钥文件读取的方式,可以通过配置让 Next.js 构建时把密钥文件纳入打包产物:

  1. 在项目根目录的 next.config.js 中添加以下配置,指定构建时包含根目录的密钥文件:
/** @type {import('next').NextConfig} */
const nextConfig = {
  experimental: {
    outputFileTracingIncludes: {
      '/api/**/*': ['./google-cloud-key.json'],
    },
  },
}

module.exports = nextConfig
  1. 修改文件路径拼接逻辑,使用 process.cwd()(Vercel 运行时该值指向项目构建后的根目录 /var/task)拼接路径:
const path = require('path')
const storage = new Storage({
  projectId: 'careful-relic-319511',
  keyFilename: path.join(process.cwd(), 'google-cloud-key.json')
});

注意:该方案需要确保密钥文件不会被提交到公开仓库,避免敏感信息泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 14:30:00