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

Webpack通过require.context加载MP3文件无法播放问题求助

解决「The element has no supported sources」音频播放报错

问题根源

你用require.context导入的音频资源被Webpack包装成了ES模块对象,而非直接的音频文件URL。从你打印的console.log(sounds['tic'])结果能看到,实际的URL藏在模块的default属性里,直接把模块对象传给Audio构造函数自然会报错。

修复方案

修改importAllSounds函数,在获取资源时提取default属性:

function importAllSounds(r) {
  return r.keys().reduce((acc, key) => {
    const k = key.replace("./", "").replace(".mp3", "");
    // 提取ES模块的default属性,拿到实际音频URL
    return {
      ...acc,
      [k]: r(key).default,
    };
  }, {});
}

const sounds = importAllSounds(require.context("Assets/sounds/right/", false, /\.(mp3|wav|m4a)$/));

验证修改

修改后再执行console.log(sounds['tic']),应该会输出类似/static/media/tic.xxxx.mp3的字符串URL,此时播放代码就能正常工作:

let audio = new Audio(sounds["tic"]);
    
document.addEventListener("keydown", () => {  
  audio.play();  
})

额外说明

Webpack 5+默认用Asset Modules处理静态资源,会自动将资源路径以ES模块的形式导出;如果你用的是Webpack 4及以下,可能是配置了file-loader并开启了esModule: true选项,同样会导致资源被包装成ES模块。无论哪种情况,提取default属性都能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:07