Node.js 18环境下遇require未定义及aws-sdk包找不到问题求助
Node.js 18环境下两类错误的原因分析
一、"Cannot find package 'aws-sdk' imported from /var/task/index.mjs" 错误原因
- Node.js 18版本的AWS Lambda运行时默认预装的是v3版AWS SDK(包名格式为@aws-sdk/*),不再提供旧版的
aws-sdk包。若代码中导入的是aws-sdk,自然会出现找不到包的问题。 - 若必须使用旧版
aws-sdk,需手动将其作为依赖项打包到部署文件中,不能依赖运行时预装。 - 同时检查
package.json是否正确声明了aws-sdk依赖,且部署时是否将node_modules目录一同上传。
二、"require is not defined in ES module scope, you can use import instead" 错误原因
- 后缀为
.mjs的文件会被Node.js自动识别为ES模块(ESM),而require()是CommonJS模块的语法,ESM环境不支持该写法。从错误栈看,你的index.mjs第一行就使用了require(),这是直接诱因。 - 若要继续用CommonJS语法,可将文件后缀改为
.cjs,或者在package.json中添加"type": "commonjs"配置(注意:若设置"type": "module",所有.js文件也会被当作ESM处理)。 - 额外排查:确认部署包中的
package.json配置与本地一致,比如"type"字段是否被正确打包;同时检查Lambda运行时是否确实设置为Node.js 18,避免版本不匹配导致的环境差异。
内容的提问来源于stack exchange,提问作者software
相关产品推荐
相关产品推荐

