Serverless+Esbuild打包Lambda函数:如何纳入模板文件夹?
解决方案
方法1:使用serverless-esbuild的copy配置
在serverless.yml的esbuild配置块中添加copy字段,直接指定需要打包的模板文件夹路径,这是最直接的实现方式:
service: your-lambda-service plugins: - serverless-esbuild custom: esbuild: bundle: true minify: true copy: - from: './path/to/email-templates/**/*' to: './email-templates'
该配置会在构建过程中自动将指定的模板文件夹及内部所有文件复制到Lambda的构建产物目录中,函数代码可通过相对路径直接访问这些模板文件。
方法2:通过代码导入触发esbuild打包
如果不想依赖copy配置,可在TS代码中显式导入模板文件(或通过glob批量导入),让esbuild识别到这些资源并自动打包:
// 导入单个模板文件 import welcomeTemplate from '../email-templates/welcome.html'; // 批量导入需借助glob(需安装@types/glob) import glob from 'glob'; const templateFiles = glob.sync('../email-templates/**/*.html');
若模板为静态文件,需在esbuild配置中添加对应文件类型的loader:
custom: esbuild: bundle: true loader: '.html': 'file'
关于externals选项无效的原因
你之前尝试的--externals/--add-externals是用于排除无需打包的依赖包,和你需要包含静态文件夹的需求完全相反,因此这些选项对你的场景没有作用。
内容的提问来源于stack exchange,提问作者DanilMakarov
相关产品推荐
相关产品推荐

