当AWS Lambda Node.js从8版本强制升级到12版本时,会出现”Error: Cannot find module ‘jmespath'”的问题

简而言之

若要升级 AWS Lambda 使用的 node.js 版本从 node.js8 到 node.js10或更高版本,由于 aws-sdk 已经内置,因此如果在 node_modules 中包含 aws-sdk 则会导致错误,因此需要将其移除。

本文的目的是以中文进行同义改写。

使用Node.js 8编写的AWS Lambda脚本已被弃用。
在AWS Lambda的nodejs10或nodejs12环境中执行同样的脚本时,会显示以下错误消息。

{"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)"]}

如果在package.json中找不到’m’jmespath’模块,对于普通模块,只需调整require语句即可。但是,对于aws-sdk,情况会有所不同。

# この様になっているものを
var aaa = require('foobar')

# このように相対パスを指定してあげれば良い
var aaa = require('./foobar')

如果您使用node_module调用aws-sdk如下,那么您需要从node_modules中删除aws-sdk。

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

如果使用yarn移除aws-sdk

yarn remove aws-sdk

如果移除npm中的aws-sdk。

npm uninstall aws-sdk

自Node.js 10开始,AWS SDK已添加到Lambda中。详见:https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html

bannerAds