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

ReactJS应用中音频文件相对路径无效,如何正确配置路径?

音频播放器路径问题及构建文件缺失疑问

我开发了一个从songsdata读取歌曲的音频播放器,相关代码如下:

AudioPlayer.js

const AudioPlayer = () => {
  const [songs, setSongs] = useState(songsdata);
  const [currentSong, setCurrentSong] = useState(songsdata[0]);

  return (
  <div className="AudioPlayer">
      <audio src={currentSong.url} />
      <Player songs={songs} setSongs={setSongs} currentSong={currentSong} />
  </div>
  );
}

Audio.js

exports.songsdata = [
{
    "title": "Song 1",
    "url": "../../assets/song1.mp3"
},
{
    "title": "Song 2",
    "url": "../../assets/song2.mp3"
}
]

我尝试使用相对路径../../assets/指向音频文件,但出现404错误。图片和视频的相对路径可正常使用,但音频的相对路径无效。另外,构建应用后会生成static/media文件夹,其中包含图片和视频,但没有音频文件。请问该如何设置正确的URL路径?为何音频文件未进入static/media文件夹?


问题解答

一、音频没进static/media的原因

在React(尤其是Create React App)这类打包项目里,webpack只会处理代码里通过import/require主动引用的资源,把它们打包到static/media目录。图片和视频能正常进入,肯定是你在代码里用import/require引入过它们;但音频只是在配置文件里写了路径,没被代码主动引用,webpack识别不到这是项目依赖,自然不会把它们打包进去。

二、正确的路径设置方法

有两种靠谱的解决方式:

方式1:用import引入音频文件

直接在配置文件或组件里引入音频,让webpack自动处理路径和打包:

修改Audio.js:

import song1 from '../../assets/song1.mp3';
import song2 from '../../assets/song2.mp3';

exports.songsdata = [
{
    "title": "Song 1",
    "url": song1
},
{
    "title": "Song 2",
    "url": song2
}
]

这种方式下,webpack会给音频文件加上哈希后缀,打包到static/media,song1、song2变量直接对应打包后的正确URL,不用手动管路径问题。

方式2:把音频放到public目录

如果不想用import,可以把音频文件移到项目根目录的public文件夹下(比如public/assets/song1.mp3),然后用绝对路径:

修改Audio.js:

exports.songsdata = [
{
    "title": "Song 1",
    "url": "/assets/song1.mp3"
},
{
    "title": "Song 2",
    "url": "/assets/song2.mp3"
}
]

这里路径开头的/表示从public目录根开始,构建时这些文件会直接复制到产物目录,不会被webpack修改文件名,适合需要保持原文件名的场景。

补充提醒

  • 两种方式二选一就行,要缓存优化选方式1,要保持文件名选方式2。
  • 先确认音频文件确实在你指定的目录里,别因为文件放错位置导致404。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 01:45:13