我有一个NodeJS AWS Lambda函数,它基于一个html模板文件(emailTemplate.html
)生成一封电子邮件。我启动了building my lambdas with esbuild via SAM。现在我想知道如何配置SAM/esbuild以将此文件包含到我的lambda包中。
这是lambda的SAM模板配置:
EmailNotificationFunction:
Type: AWS::Serverless::Function
Properties:
CodeUri: ./lambdas-node/email-notifications/
Handler: daily-summary.handler
Timeout: 120
MemorySize: 512
Runtime: nodejs16.x
Metadata:
BuildMethod: esbuild
BuildProperties:
Sourcemap: true
EntryPoints:
- daily-summary.ts
在我的应用程序代码中,我从本地文件系统读取文件:
fs.readFileSync("./emailTemplate.html", "utf-8")
html文件很小,所以我想坚持这种最小化的方法。我总是可以从S3获取文件或将其打包到一个层中,但我不喜欢去那里。
1条答案
按热度按时间1wnzp6jl1#
好的,基本上ESBuild的文件加载器是可行的方法。ESBuild将用对文件的引用替换导入,并将文件复制到结果包中。(这正是我想要的。)
这种行为似乎是ESBuild特有的,不能在常规的
tsc
编译器中使用。因此,我用tsc
替换了类型检查的构建步骤,用esbuild
替换了转换(见下文)。我在代码中添加了一个html文件的导入。这将触发ESBuild对该文件执行某些操作。
为了让typechecker满意,我还添加了一个
types.d.ts
文件(注意d.ts
扩展名)然后,我将
Loader
添加到SAM模板中,以便ESBuild复制html文件并在导入中引用它们:最后,我的新测试命令现在看起来像这样: