无法使用 Nodejs14.x ES 模块在 AWS lambda 中导入包

Cannot import package in AWS lambda with Nodejs14.x ES module

我有一个层,其中 node_modules 的路径是 nodejs/node14/node_modules

使用该层,我尝试在 Lambda 函数中导入一个包,例如 'aws-cloudfront-sign',如下所示:

import cfsign from 'aws-cloudfront-sign'

我收到错误消息

Cannot find package 'aws-cloudfront-sign' imported from /var/task/signer.js\nDid you mean to import aws-cloudfront-sign/lib/cloudfrontUtil.js?

但是如果我像这样导入包:

import cfsign from '/opt/nodejs/node14/node_modules/aws-cloudfront-sign/lib/cloudfrontUtil.js'

成功了。

你知道为什么吗?我怎样才能正确导入包?

这似乎是一个错误。它发生在图层和 SDK 中。 Github:

上有许多类似的未解决问题

Nodejs Lambda: Cannot find package 'aws-sdk'

Cannot find package when using ES Module and Lambda Layer

ES6 imports don't work in @aws-sdk/client-iotsitewise

如您所见,目前唯一的解决方法似乎是使用绝对路径。例如:

import { DynamoDB } from 'aws-sdk;'

失败,而

import AWS from '/var/runtime/node_modules/aws-sdk/lib/aws.js';
const { DynamoDB } = AWS;

会起作用。

我建议您将您的意见添加到现有的未决问题中,以帮助确保它得到关注。