Nest+Serverless部署报错ENOENT:找不到src/clone目录求助
问题解决:Serverless部署后空文件夹缺失导致「No such file or directory」错误
问题描述
项目结构如下:
src ---- Clone(空文件夹) ---- app.module.ts ---- app.service.ts
Serverless配置片段:
functions: main: timeout: 60 handler: src/main.handler events: - schedule: cron(40 22 ? * MON *)
该服务定时触发S3存储桶,将CSV文件推送到GitHub,克隆目标为src/clone文件夹。本地运行正常,但部署后出现「No such file or directory」错误,解压Serverless打包文件后发现clone文件夹不存在。
原因分析
Serverless Framework默认打包时会忽略空文件夹,同时Git默认也不追踪空文件夹(除非文件夹内有文件),导致空的src/Clone目录未被包含进部署包,运行时自然找不到该目录。
解决方案
1. 给空文件夹添加.gitkeep文件
在src/Clone目录下创建一个空的.gitkeep文件,让Git追踪该文件夹,Serverless打包时就会将其包含进去:
touch src/Clone/.gitkeep
2. 配置Serverless强制包含目标目录
在serverless.yml中添加package配置项,明确指定要包含src/Clone目录:
package: include: - src/Clone/**
此配置会强制打包工具将该目录加入部署包,即使它是空的。
3. 运行时动态创建目录
在代码执行Git克隆操作前,先检查目标目录是否存在,不存在则自动创建(以Node.js为例):
const fs = require('fs'); const path = require('path'); const cloneDirPath = path.join(__dirname, 'Clone'); if (!fs.existsSync(cloneDirPath)) { // recursive: true 确保父目录不存在时也能创建 fs.mkdirSync(cloneDirPath, { recursive: true }); } // 后续执行Git克隆逻辑
这种方式不依赖打包时的目录存在,运行时自动生成,适配性更强。
内容的提问来源于stack exchange,提问作者JaNith RathNayaka
相关产品推荐
相关产品推荐

