AWS Lambda - Runtime.ImportModuleError: Error: Cannot find module 'jmespath'

AWS Lambda - Runtime.ImportModuleError: Error: Cannot find module 'jmespath'

我正在使用无服务器框架使用 aws lambda,我将运行时从 nodejs8.10 更改为 nodejs10.x,然后我得到一个错误跟踪,

{"errorType":"Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'jmespath'","stack":["Runtime.ImportModuleError: Error: Cannot find module 'jmespath'","    at _loadUserApp (/var/runtime/UserFunction.js:100:13)","    at Object.module.exports.load (/var/runtime/UserFunction.js:140:17)","    at Object.<anonymous> (/var/runtime/index.js:36:30)","    at Module._compile (internal/modules/cjs/loader.js:701:30)","    at Object.Module._extensions..js (internal/modules/cjs/loader.js:712:10)","    at Module.load (internal/modules/cjs/loader.js:600:32)","    at tryModuleLoad (internal/modules/cjs/loader.js:539:12)","    at Function.Module._load (internal/modules/cjs/loader.js:531:3)","    at Function.Module.runMain (internal/modules/cjs/loader.js:754:12)","    at startup (internal/bootstrap/node.js:283:19)"]}

此问题的原因是什么以及如何解决?

尝试在你的模块名前加上./。我将我的名字从 require("xxx") 更改为 require("./xxx") 并且它再次起作用。在我的例子中,我想添加的本地模块文件 (xxx.js) 与 index.js 文件处于同一级别。

我还想将其添加为调整路径之前的准备步骤,检查并验证 package.json(s) 文件中列出的依赖项。
我已经看到这个错误 "Runtime.ImportModuleError","errorMessage":"Error: Cannot find module 'something' 出现在 aws cloudwatch 日志中。 发生这种情况是因为我的项目有多个 subprojects/subfolders 和它们自己的 package.json 文件。确保模块在子项目的 package.json.
中被正确引用 在本地开发中,您可能在 base/global package.json 中引用了依赖项,并认为它有效——但是当您部署 lambda 时,构建期间发生的 npm 安装不包括新需要的模块,因为它未在本地子项目的 package.json 中引用。

我遇到了同样的问题Error: Cannot find module 'jmespath'并解决了。

您通过 node_modules 使用 aws-sdk 吗?喜欢如下

var aws = require('aws-sdk');

如果是这样,您只需从 node_modules 中删除 aws-sdk。

删除纱线的 aws-sdk

yarn remove aws-sdk

删除 npm 的 aws-sdk

npm uninstall aws-sdk

aws-sdk 自 nodejs10 以来已包含在 lambda 中。 参见:https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html

我们项目中也遇到了同样的问题。 这是与文件导入相同的问题。 我们的文件名 xabc.js 并导入为 Xabc.js VScode 没有抱怨,表现得很好

对我来说,问题是这个 jmespath 库实际上从上传的 node_modules 文件夹中丢失了(还有一些其他的)。
通过下载 zip(因为源太大)验证了这一点,但没有找到 jmespathaws-sdk 库。
通过使用 npm i 安装依赖项并使用更新的 node_modules 文件夹重新上传 lambda 解决了这个问题。

在根无服务器项目文件夹中

npm i --save <npm module name missing>