当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