如何解决使用 CDK 部署的 AWS Lambda 中的“无法在模块外使用 import 语句”错误

问题描述 投票:0回答:1

我正在使用 AWS CDK (

v2.140.0
) 部署一个用 ES6 JavaScript 编写并具有 Node
v20.x
运行时的 lambda 函数。项目的根目录包含一个
package.json
文件,我在其中定义
"type": "module"
。我正在使用 aws CDK 和 SDK 软件包,但在我的应用程序代码中没有使用任何第 3 方库。

我的文件结构如下:

bin
  cdk.js
lib
  my-stack.js
src
  index.js
package.json
cdk.json

我能够成功合成 lambda 并将其部署到 AWS。 lambda 按 Eventbridge 计划运行并在正确的时间调用。

但是,我在 Cloudwatch 中收到以下错误:

SyntaxError: Cannot use import statement outside a module

我的

index.js
文件写为:

import { foo } from './foo-service.js';

export const handler = async () => {
  // do stuff with foo
};

我已经深入了一些兔子洞,并尝试了这篇SO帖子中的大部分建议,但没有成功。

  • 将我的
    index.js
    文件更改为
    index.mjs
  • 使用“节点”特定的 CDK 构造
  • package.json
    目录中创建额外的
    src
    文件并定义
    "type": "module"

非常感谢任何见解或指导。

node.js amazon-web-services aws-lambda aws-cdk es6-modules
1个回答
0
投票

最终,我的问题来自于 AWS 教程,其中 lambda 函数完全包含在单个

index.js
文件中,在我的情况下,我的处理程序需要该文件之外的模块。我需要将我的 cdk 实现更改为:

    // BEFORE
    const lambdaFn = new Lambda.Function(this, 'lambda-id', {
      runtime: Lambda.Runtime.NODEJS_20_X,
      handler: 'index.handler',
      code: new Lambda.InlineCode(fs.readFileSync('./src/index.js', { encoding: 'utf-8' }))
    });

    // AFTER
    const lambdaFn = new Lambda.Function(this, 'lambda-id', {
      runtime: Lambda.Runtime.NODEJS_20_X,
      handler: 'index.handler',
      code: Lambda.Code.fromAsset('./src', { exclude: ['*.js'] })
    });
© www.soinside.com 2019 - 2024. All rights reserved.