You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 00:15:08