升级Node.js至18.x后AWS Lambda出现No Such File错误
问题分析与修复建议
核心原因推测
Cloud9部署Node.js 18.x版本Lambda函数时,默认打包逻辑大概率发生了变化——旧版本运行时(如16.x及以下)会自动包含项目根目录下的public文件夹,但18.x环境下,部署包可能未正确将public目录及其文件纳入,导致Lambda运行时找不到目标文件。
修复方案
检查部署包内容
手动导出Cloud9生成的部署ZIP包,解压后确认public文件夹是否存在:- 在Cloud9中右键项目根目录,选择"Download"获取ZIP包
- 本地解压后查看是否包含
public目录及内部HTML文件
若缺失,说明打包过程未包含这些文件,需调整部署配置。
调整Cloud9部署配置
在Cloud9的Lambda部署设置中明确指定要包含的文件/目录:- 打开Cloud9的"Deploy"面板,选择对应Lambda函数
- 找到"Deployment Settings",在"Include Files"中添加
public/**/*(表示包含public下所有文件和子目录) - 重新部署函数后验证问题是否解决。
改用更稳定的绝对路径写法
Node.js 18.x在Lambda环境中__dirname的行为可能有变化,尝试结合process.cwd()拼接路径:const path = require('path'); const headerPath = path.join(process.cwd(), 'public', 'header.html'); // 后续用fs.readFile读取headerPath即可process.cwd()在Lambda 18.x环境中指向函数代码的根目录,路径稳定性更高。检查文件权限
部署包中文件权限不正确也可能导致读取失败,在Cloud9中通过命令调整:chmod -R 755 public/ chmod 644 public/*.html确保目录具备可访问权限,文件具备可读权限。
本地模拟Lambda环境测试
使用aws-lambda-local工具在Cloud9本地模拟Node.js 18.x环境运行函数,排查路径问题:npm install -g aws-lambda-local aws-lambda-local -l index.js -e event.json -r nodejs18.x若本地模拟也报错,说明代码或路径配置本身存在问题;若本地正常,则问题出在Cloud9的部署打包环节。
内容的提问来源于stack exchange,提问作者user1279779
相关产品推荐
相关产品推荐

