AppSync GraphQL解析程序可以是written in JavaScript,而不是VTL。AppSync为TypeScript解析器提供了开发时帮助程序,但我们必须自己捆绑代码。
如何在CDK中捆绑.ts
解析器?
我们将解析器代码传递给CDK AppsyncFunction构造。但是我们不能直接传递my-resolver.ts
文件。appsync.Code.fromAsset
需要my-resolver.js
。目前还没有像NodejsLambda构造那样包含电池的esbuild
本地捆绑选项。
const resolverFunc = new appsync.AppsyncFunction(this, "MyResolverFunc", {
name: "my_resolver",
api,
dataSource: dynamoDataSource,
code: appsync.Code.fromAsset(
path.join(__dirname, "../path/to/my_resolver.ts") // <- ❌ need a .js file here
),
runtime: appsync.FunctionRuntime.JS_1_0_0,
});
1条答案
按热度按时间gudnpqoy1#
目前,在CDK synth过程中运行
esbuild
脚本似乎是最简单的选择。**[步骤1]**在
package.json
中添加esbuild
脚本。为了清楚起见,下面以非字符串形式呈现的捆绑脚本为每个.ts
解析器输入文件输出一个.mjs
文件。设置遵循AppSync文档中的示例:**[步骤2]**告诉CDK使用命令行(
cdk synth --build myBundleScript
)或cdk.json
配置文件(build: myBundleScript
)中的build arg脚本。**[步骤3]**最后,将AppsyncFunction构造的
code
prop指向从JavaScript构建的资产:其他选择?AppSync解析程序当前没有内置的CDK捆绑包。NodejsLambda bundler似乎可以工作,但它不是导出成员。最后,虽然AssetStaging构造具有捆绑选项,但它仅发出
.zip
存档,而不是AppSync正在查找的.js
或.mjs
文件(请参阅GitHub issue)。