我正在尝试在 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 应用程序,但我无法安装它,因为我正在虚拟机上工作)
你有一个错字。也许这就是你的问题。
您正在导出“DnclistimporterStack”,但正在导入“DncListImporterStack”