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

Next.js生产环境中EJS邮件模板及导入文件的最佳存放位置咨询

Next.js 中 EJS 邮件模板及资源文件的最佳存放方案

不推荐放入 src/public 目录

public 目录用于存放对外可访问的静态资源(如图片、静态HTML),邮件模板属于后端渲染的私有资源,放在这里存在泄露风险,且不符合资源分类逻辑,因此不建议。

推荐方案1:将模板作为字符串导入(最可靠)

把EJS模板放在 src/lib/emails 这类项目源码目录下,利用Next.js的资源导入能力,通过 ?raw 后缀将模板读取为字符串,避免依赖文件系统路径。

修改后的示例代码:

import type { NextApiRequest, NextApiResponse } from 'next';
const ejs = require('ejs');
// 导入EJS模板为原始字符串
import verificationTemplate from './userVerification.ejs?raw';

type Data = {
  name: string;
};

export default function handler(
  req: NextApiRequest,
  res: NextApiResponse<Data>
) {
  // 直接渲染字符串模板
  const templateContent = ejs.render(verificationTemplate, { verifyURL: 'testurl' });
  console.log(templateContent);
  res.status(200).end('test');
}
  • 优势:无需处理文件路径问题,Next.js构建时会自动将模板打包进产物,生产环境稳定可用;同时能和项目源码一起参与TypeScript检查。
  • 对于zip等后端使用的资源文件,也可采用相同方式导入,或放在根目录的 assets 目录统一管理。

推荐方案2:项目根目录下创建独立资源目录

如果必须通过文件系统读取模板,可在Next.js项目根目录(与 src 同级)创建 emails 或 templates/emails 目录,专门存放模板及相关资源。

修改代码中的路径:

const basePath = path.join(process.cwd(), 'emails');
  • 优势:生产环境下该目录会完整保留在服务器上,路径计算稳定;不会被Next.js的编译过程干扰。
  • 注意:若使用TypeScript,需在 tsconfig.json 的 include 数组中添加 "emails/**/*",确保类型检查覆盖这些文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 08:48:21