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

Nuxt3 Vercel无服务器API端点中@google-cloud/storage运行失败求助

解决Nuxt3 + Vercel无服务器函数中@google-cloud/storage的运行问题

针对你遇到的本地正常、Vercel部署后报错uuid缺失,以及改用require提示未定义的问题,以下是具体解决方案:

核心问题分析

  • Nuxt3的Nitro引擎在构建无服务器函数时,可能会对Node.js依赖进行Tree Shaking优化,导致@google-cloud/storage依赖的uuid模块被误剔除。
  • Nuxt3的server/api目录默认是ESM环境,不支持CommonJS的require语法,因此改用require会报错。

解决方案步骤

1. 确保依赖正确安装并配置Nitro打包规则

首先确认uuid已作为生产依赖安装:

npm install uuid
# 或 yarn add uuid

然后在nuxt.config.ts中配置Nitro,将@google-cloud/storage和uuid设为内联打包的依赖,避免被优化掉:

export default defineNuxtConfig({
  nitro: {
    externals: {
      inline: ['@google-cloud/storage', 'uuid']
    }
  }
})

2. 修正私钥的换行处理逻辑

Vercel环境变量中的换行符可能会被转义,建议将私钥的处理逻辑改为更可靠的正则替换:

// 替换原代码中的private_key行
private_key: privKey.replace(/\\n/g, '\n'),

3. 保持ESM导入格式,避免使用require

继续使用ESM风格的导入,不要切换到require,因为Nuxt3的服务器端代码基于ESM:

// 保持原导入方式即可
import { Storage, GetFilesResponse } from "@google-cloud/storage";

4. 清除Vercel构建缓存并重新部署

Vercel的缓存可能导致旧的依赖配置残留,进入Vercel项目控制台,找到部署记录,点击Redeploy并勾选Clear build cache,重新部署项目。

5. 验证环境变量配置

确保Vercel中的gcpPrivateKey、gcpClientEmail、gcpProjectId等环境变量已正确设置,且gcpPrivateKey的格式正确(包含完整的私钥内容,换行符已正确转义或输入)。

代码修改示例

修改后的/server/api/pics/[bucket-name].get.ts核心部分:

// ... 其他导入
const storage: Storage = new Storage({
  projectId: runtimeConfig.public.gcpProjectId,
  credentials: {
    type: "service_account",
    private_key: privKey.replace(/\\n/g, '\n'), // 替换为正则替换
    client_email: clientEmail,
  },
});
// ... 其他逻辑

额外提示

如果上述步骤仍未解决问题,可以尝试将@google-cloud/storage降级到较稳定的版本(比如^6.10.0),部分新版本可能存在ESM兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 22:35:13