AWS Lambda Node.js项目源文件移入子文件夹报Cannot Find Module错误如何解决
问题原因
你将JS文件移入子文件夹后,Lambda的执行入口配置、代码内的相对路径引用没有同步调整,导致找不到模块和配置文件。
具体修改步骤
- 第一步:修改CloudFormation模板中对应函数的
Handler参数
原来的Handler配置是role-getall.getAllRoles,是相对于CodeUri根目录查找入口文件,现在文件移入role子文件夹,需要加上子目录路径,修改为:
规则是:Handler: role/role-getall.getAllRoles[相对于CodeUri的目录路径]/[入口文件名不带后缀].[导出的函数名] - 第二步:修改Lambda函数内的配置文件读取路径
你原来用相对路径properties.properties读取配置,函数移入子目录后,相对路径的基准目录变成了函数所在的role文件夹,找不到根目录下的配置文件,需要用__dirname拼接绝对路径:
把原来的代码:
修改为:const prop = PropertiesReader('properties.properties');
其中const prop = PropertiesReader(`${__dirname}/../properties.properties`);../代表向上退一级到CodeUri根目录,如果你把配置文件也移动到其他目录,调整对应的相对路径即可。 - 第三步:确认目录结构合规
确保你的node_modules、properties.properties都放在CodeUri指定的根目录(也就是你配置的aaaaa-restapi/目录下),所有子目录的Lambda函数都会自动从根目录加载依赖,不需要每个子目录单独安装npm包。
修改完成后重新部署SAM模板即可正常调用。
内容的提问来源于stack exchange,提问作者PeakGen
相关产品推荐
相关产品推荐

