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

JavaScript:使用变量为路径初始化Audio报错、硬编码正常是什么原因?

问题根因
  • webpack静态编译限制:webpack 是在打包编译阶段静态扫描所有依赖的,不会执行你的JS代码推导变量的实际取值。当你给require()传入硬编码的路径字面量时,webpack能直接识别到目标资源,会提前把对应的mp3文件打包进产物、分配正确的访问路径,所以运行正常。
  • 当传入变量作为require()参数时,webpack无法在编译阶段确定你要加载的资源,不会把对应的mp3文件纳入打包范围,运行时自然找不到对应模块,报错里的webpackEmptyContext就是webpack未匹配到动态require资源的典型标识。
解决方案

方案1:半动态路径(推荐,适合路径前缀固定、仅文件名可变的场景)

把固定的路径前缀硬编码在require里,仅可变部分用变量传入,webpack会自动扫描对应目录下所有符合规则的文件提前打包:

// 仅文件名部分用变量,前缀硬编码
var fileName = "test.mp3"
this.audio = new Audio(require(`../../recordings/${fileName}`))

方案2:使用静态资源目录(适合完全动态路径的场景)

把所有音频文件放到项目的静态资源目录(比如Vue项目的public文件夹、React项目的public文件夹),不需要用require引入,直接用绝对路径访问即可:

// 假设音频文件放在 public/recordings 目录下
var path = "/recordings/test.mp3"
this.audio = new Audio(path)

静态目录下的资源不会被webpack编译打包,直接通过路径就能访问,不受require静态解析的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 09:45:02