Lam*_*Lam 8 aws-lambda node-js-14 esmodules
我有一个层,其中 node_modules 的路径是nodejs/node14/node_modules。
使用该层,我尝试在 Lambda 函数中导入一个包,例如“aws-cloudfront-sign”,如下所示:
import cfsign from 'aws-cloudfront-sign'
Run Code Online (Sandbox Code Playgroud)
我收到错误消息
Cannot find package 'aws-cloudfront-sign' imported from /var/task/signer.js\nDid you mean to import aws-cloudfront-sign/lib/cloudfrontUtil.js?
Run Code Online (Sandbox Code Playgroud)
但是如果我像这样导入包:
import cfsign from '/opt/nodejs/node14/node_modules/aws-cloudfront-sign/lib/cloudfrontUtil.js'
Run Code Online (Sandbox Code Playgroud)
它成功了。
你知道为什么吗?如何正确导入包?
hen*_*lst 10
2023 年更新:
请注意,根据问题,下面的解决方案适用于具有特定 SDK 版本的 Node 14 问题。Node 18+ 现在支持 AWS SDK v3 的导入。对于其他 Node/SDK 版本使用以下解决方案可能不起作用。
请参阅此处的 AWS 帖子以及讨论使用 Lambda 的节点运行时 14 和 16 时,ESM 从 NODE_PATH 导入不可用。
结束更新
这似乎是一个错误。它发生在层和 SDK 中。Github 上有许多类似的未解决问题:
ES6 导入在 @aws-sdk/client-iotsitewise 中不起作用
正如您所发现的,目前唯一的解决方法似乎是使用绝对路径。例如:
import { DynamoDB } from 'aws-sdk;'
Run Code Online (Sandbox Code Playgroud)
失败,而
import AWS from '/var/runtime/node_modules/aws-sdk/lib/aws.js';
const { DynamoDB } = AWS;
Run Code Online (Sandbox Code Playgroud)
将工作。
我建议您将您的声音添加到现有的未决问题中,以帮助确保它得到关注。
| 归档时间: |
|
| 查看次数: |
18276 次 |
| 最近记录: |