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

在Vercel上部署Hydrogen集成Sendgrid遇打包错误求助

解决Hydrogen 1.6.1 + SendGrid 7.7.0在Vercel部署时的fs模块打包错误

这个问题的核心是SendGrid的@sendgrid/helpers模块引用了Node.js内置的fs模块,而Hydrogen在Vercel部署时的前端打包流程会尝试将该模块打包到浏览器环境中,导致报错。禁用ssr.noExternal会引发其他依赖的打包冲突,并非正确解决方向。以下是经过验证的可行方案:

方案1:将邮件发送逻辑完全移至服务器端代码

Hydrogen基于React Server Components和Remix,你可以把SendGrid的调用放在仅服务器端运行的代码中,比如API Route或者Server Component:

示例:创建API Route处理邮件发送

在app/routes/api/send-email.js中写入:

import sendgrid from '@sendgrid/mail';

// 初始化SendGrid
sendgrid.setApiKey(process.env.SENDGRID_API_KEY);

export async function POST(request) {
  const { to, subject, text } = await request.json();
  
  try {
    await sendgrid.send({
      to,
      from: process.env.SENDGRID_FROM_EMAIL, // 提前在Vercel配置该环境变量
      subject,
      text,
    });
    return new Response(JSON.stringify({ success: true }), { status: 200 });
  } catch (err) {
    return new Response(JSON.stringify({ error: err.message }), { status: 500 });
  }
}

前端代码通过fetch调用这个API即可,这样SendGrid的所有代码都在服务器端运行,完全不会涉及前端打包fs模块的问题。

方案2:配置打包工具排除SendGrid的前端打包

在Hydrogen项目的remix.config.js中,通过serverDependenciesToBundle指定SendGrid相关模块仅在服务器端打包:

/** @type {import('@remix-run/dev').AppConfig} */
export default {
  // 保留原有配置...
  serverDependenciesToBundle: [
    /@sendgrid\/mail/,
    /@sendgrid\/helpers/,
  ],
};

这个配置会告诉打包工具,把这两个模块当作服务器端专属依赖,不将其打包到前端代码中,从而规避fs模块的报错。

额外注意事项

  • 确保Vercel项目的环境变量中已经配置了SENDGRID_API_KEY和SENDGRID_FROM_EMAIL,不要依赖本地的.env文件。
  • 本地开发时测试API Route,可以直接通过Postman或者前端fetch调用验证功能正常。

确实有不少开发者成功在Hydrogen 1.x + Vercel + SendGrid的架构下完成部署,核心就是让SendGrid的代码完全运行在服务器端,避开前端打包Node内置模块的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:02:25