NestJS 8如何正确读取assets目录下的资源文件
NestJS 8 读取assets目录资源文件方案
你遇到的路径找不到问题,核心是两个原因:一是NestJS默认编译时不会把assets静态资源拷贝到dist输出目录,二是fs模块默认使用进程启动的工作目录解析相对路径,硬写相对路径在不同运行环境下会解析错误。
1. 配置静态资源编译规则
修改项目根目录下的nest-cli.json,添加assets相关配置,让编译时自动把assets目录同步到dist目录:
{ "compilerOptions": { "assets": ["assets/**/*"], "watchAssets": true } }
watchAssets配置开启后,开发模式下修改assets内的文件会自动同步到dist,无需重启服务
2. 使用绝对路径读取文件
不要直接硬写相对路径,配合path模块拼接适配编译后目录结构的绝对路径:
首先引入依赖:
import * as path from 'path'; // 推荐使用promise版本的fs模块,方便异步处理 import * as fs from 'fs/promises';
然后拼接路径读取文件:
// __dirname是当前执行js文件所在的目录,编译后js文件默认在dist的对应业务目录下 // 所以需要回退到dist根目录再找assets目录 const audioPath = path.join(__dirname, '../assets/audio/sound-1.mp3'); const audioBuffer = await fs.readFile(audioPath);
注意事项
- 原代码中直接调用
fs.readFile没有传入回调函数也没有处理异步逻辑,属于语法错误,要么传入回调处理返回结果,要么切换为fs/promises的异步方法配合await使用 - 生产环境部署时,需要将dist目录下的整个assets目录一同部署,不要仅上传编译后的JS文件
内容的提问来源于stack exchange,提问作者Bad_Pan
相关产品推荐
相关产品推荐

