NestJS中.hbs资源文件复制路径错误问题求助
解决NestJS开发中.hbs模板文件复制路径错误问题
核心配置调整(nest-cli.json)
NestJS通过nest-cli.json的compilerOptions.assets字段控制静态资源的复制规则,你需要确保配置的路径匹配模板文件的实际位置,并保持输出路径与源码结构一致:
1. 基础配置(适配所有src下的.hbs文件)
如果你的.hbs文件分散在src目录的各个模块中,直接配置全局匹配规则:
{ "$schema": "https://json.schemastore.org/nest-cli", "collection": "@nestjs/schematics", "sourceRoot": "src", "compilerOptions": { "deleteOutDir": true, "assets": [ { "include": "**/*.hbs", // 匹配src下所有.hbs文件 "watchAssets": true, // dev模式下自动监听文件变化并重新复制 "outputPath": "dist" // 输出到dist目录,保持与src一致的层级结构 } ] } }
2. 精准配置(仅复制指定模块的模板)
如果你的模板集中在src/mail/templates目录下,可缩小匹配范围:
"assets": [ { "include": "mail/templates/**/*", // 仅匹配mail模块下的所有模板文件 "watchAssets": true, "outputPath": "dist/src/mail/templates" // 明确指定输出路径,确保与源码路径对应 } ]
代码中正确引用模板路径
配置完成后,在邮件服务中引用模板时,务必使用__dirname拼接路径,适配编译后的dist目录结构:
import { join } from 'path'; import { Injectable } from '@nestjs/common'; import { MailerService } from '@nestjs-modules/mailer'; @Injectable() export class MailService { constructor(private readonly mailerService: MailerService) {} async sendNotification() { await this.mailerService.sendMail({ to: 'user@example.com', subject: '通知邮件', // 拼接编译后的模板路径:dist/src/mail/templates/notification.hbs template: join(__dirname, 'templates', 'notification'), context: { username: '张三', content: '您的订单已发货' } }); } }
排查步骤
如果配置后路径仍不正确,按以下步骤排查:
- 执行
npm run build,查看dist目录中.hbs文件的实际位置是否与预期一致 - 确认
nest-cli.json中的sourceRoot字段为"src"(默认值,若修改过需同步调整include路径) - 检查
include路径是否为相对于sourceRoot的相对路径(例如src下的mail/templates对应include值为mail/templates/**/*)
内容的提问来源于stack exchange,提问作者Specht
相关产品推荐
相关产品推荐

