我有一个NodeJS AWS函数,它基于html模板文件(emailTemplate.html)生成电子邮件。我创办了通过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中获取文件或将其打包到一个层中,但我不喜欢这样做。
发布于 2022-11-24 15:12:41
好的,基本上,ESBuild的文件加载器是要走的路。ESBuild将用对文件的引用替换导入,并将文件复制到结果包。(这正是我想要的。)
这种行为似乎是ESBuild特有的,不适用于常规的tsc编译器。因此,我将构建步骤替换为使用tsc进行打字,用esbuild转换(见下文)。
我在代码中添加了html文件的导入。这将触发ESBuild来处理这个文件。
import emailTemplateHtmlUrl from "./emailTemplate.html";为了让打字机高兴,我还添加了一个types.d.ts文件(请记住d.ts扩展名)。
declare module '*.html' {
const value: string;
export default value
}然后,我将Loader添加到我的SAM模板中,以便ESBuild可以复制html文件并在导入中引用它们:
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
Loader:
- .html=file
EntryPoints:
- daily-summary.ts最后,我的新测试命令现在看起来如下:
tsc --noEmit
npx esbuild daily-summary.ts --outdir=. --loader:.html=file --platform=node
--bundle
mocha *.spec.jshttps://stackoverflow.com/questions/74534054
复制相似问题