无法使用CDK部署.mjs文件

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

我正在尝试在 vscode 本地创建一个 Nodejs Lambda 项目,我将使用 CDK 进行部署。我从跑步开始

cdk init app --language javascript

在开发过程中的某个时刻,我想要使用 EC6 模块,因此我需要将“type”:“module”添加到我的 package.json 中

如果我现在运行 cdk Synth,我开始收到这些错误:

文件:///E:/Code/Github/VBG/dnclistimporter/bin/dnclistimporter.js:3 const cdk = require('aws-cdk-lib'); ^

ReferenceError: require 未在 ES 模块作用域中定义,您可以使用 import 代替 该文件被视为 ES 模块,因为它 有一个“.js”文件扩展名并且 'E:\Code\Github\VBG\dnclistimporter\package.json' 包含“类型”: “模块”。要将其视为 CommonJS 脚本,请将其重命名为使用 '.cjs' 文件扩展名。

很公平,所以我将需求更改为导入,因此在我的 importer.js 文件中

const cdk = require('aws-cdk-lib'); const { DnclistimporterStack } = require('../lib/dnclistimporter-stack');

const app = new cdk.App();新的 DnclistimporterStack(应用程序, 'DnclistimporterStack', {});

变成这样了

从“aws-cdk-lib”导入*作为cdk; 从 '../lib/dnclistimporter-stack' 导入 { DncListImporterStack }; const app = new cdk.App(); 新的 DnclistimporterStack(app, 'DnclistimporterStack', {});

现在我收到以下错误消息

错误 [ERR_MODULE_NOT_FOUND]:无法在 \dnclistimporter.js 中找到从 E:\Code\Github\VBG\dnclistimporter 导入的模块“E:\Code\Github\VBG\dnclistimporter\lib\dnclistimporter-stack”

是相同的代码,只是使用 import 而不是 require 导入,但没有找到模块。我将 .js 重命名为 .mjs,现在它给出了

语法错误:请求的模块“../lib/dnclistimporter-stack.mjs”不提供名为“DncListImporterStack”的导出

这是相同的代码,只是将文件重命名为 .mjs:

const { 堆栈,持续时间 } = require('aws-cdk-lib');班级 DnclistimporterStack 扩展了 Stack {

构造函数(范围,id,道具){ 超级(范围,ID,道具); } }

module.exports = { DnclistimporterStack }

我将需求更改为导入:

import { Stack } from 'aws-cdk-lib'

class DnclistimporterStack extends Stack {
 
  constructor(scope, id, props) {
    super(scope, id, props);

  }
}

module.exports = { DnclistimporterStack }

但是得到同样的错误。我做错了什么,有没有更好的方法来设置 AWS Lambda 项目(除了需要 docker 的 AWS SAM 应用程序,但我无法安装它,因为我正在虚拟机上工作)

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

你有一个错字。也许这就是你的问题。

您正在导出“DnclistimporterStack”,但正在导入“DncListImporterStack”

© www.soinside.com 2019 - 2024. All rights reserved.