Node.js:使用Lambda层的ES import后未找到模块

0

【以下的问题经过翻译处理】 我们正在尝试使用AWS SDK v3模块来部署Lambda函数。引入语句使用标准的ES语法,并在本地环境中运行良好,在将整个模块打包进函数时也能正常运行:

import { SESv2Client, SendEmailCommand } from '@aws-sdk/client-sesv2';

为了提高效率并实现重用,我们将模块迁移至了一个layer中。当我们运行函数(尝试使用Node.js 14和16运行时),我们依然收到如下错误:

Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@aws-sdk/client-sesv2' imported from /var/task/index.js

如果我们删除ES语法并使用require语句的CommonJS语法,则可以正确加载模块。但是我们更希望使用现代语法以及与之相伴的性能提升。根据AWS文档,node.js lambda函数支持ES引入于Node.js 14.xNode.js 16.x中。

有没有其他人遇到过这个问题,并找到了解决方案?

profile picture
专家
已提问 2 年前56 查看次数
1 回答
0

【以下的回答经过翻译处理】 AWS支持已经确认我们无法在ES中利用层:

当在Lambda中使用模块类型时,似乎不支持从层中导入ESM模块。……这个阻碍了我们从层中导入ES模块的Node功能,因为ESM加载器在node中不支持“NODE_PATH”变量。

AWS正在努力支持ES,但这意味着我们失去了层的功能。支持提供了一个我们将尝试的包装器解决方法。与我们在这里找到的内容相符。希望这能为其他人节省我们上周经历的头痛。

profile picture
专家
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则