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

SvelteKit用adapter-node部署后,node build运行时无法找到音频文件

问题解答

fs失效的原因

  • Node.js的fs模块仅能识别文件系统的实际物理路径,而$lib是SvelteKit提供的路径别名,Node.js运行时无法解析该别名。部署后构建产物的目录结构与开发阶段的源码结构完全不同,直接用$lib/audio作为路径自然找不到对应文件。
  • 即便将音频文件移至src/lib/server/audio,构建后文件的实际存放路径会发生变化,但代码中仍使用$lib/server/audio这个别名路径,fs依然无法识别并定位文件。

纯Vite解决方案

使用Vite的import.meta.glob批量导入音频文件并直接获取base64编码,Vite会在构建阶段自动处理资源路径与编码,确保运行时能正常访问内容。

修改/src/routes/api/bell/+server.ts代码如下:

import { json } from '@sveltejs/kit';
import type { RequestHandler } from './$types';

// 批量导入audio目录下所有文件,直接获取base64编码
const audioFiles = import.meta.glob('$lib/audio/*', { eager: true, as: 'base64' });

// 将对象转为数组,方便随机选取
const audioEntries = Object.entries(audioFiles);

export const GET = (() => {
  // 随机选取一个音频文件的base64内容
  const [, base64Content] = audioEntries[Math.floor(Math.random() * audioEntries.length)];

  return json(base64Content);
}) satisfies RequestHandler;

关键说明

  • eager: true:确保在服务器端同步加载所有匹配的音频文件,避免异步加载导致的运行时问题;
  • as: 'base64':告诉Vite直接将音频文件编码为base64字符串,无需额外处理即可直接返回。

内容的提问来源于stack exchange,提问作者SleepingForge

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:25:16