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

Next.js导入public目录MP3文件报错Module not found求助

解决Next.js中导入public目录音频文件的错误

错误原因

Next.js的模块解析规则和纯React项目不同:在纯React中,绝对路径/audio/intro.mp3会指向public/audio目录,但Next.js里模块导入的绝对路径/是从项目根目录的源码文件夹(如components、pages)开始解析,而非public目录,所以找不到目标文件。

解决方案

方案1:直接使用静态资源URL(推荐)

Next.js会将public目录下的文件暴露为根路径的静态资源,因此无需导入音频文件,直接把资源路径字符串传给useSound即可:

import React from "react";
import { Button, Flex, Box, WrapItem } from "@chakra-ui/react";
import useSound from "use-sound";

export default function Introduction() {
    // 直接传入public下的资源路径
    const [play, { stop }] = useSound("/audio/intro.mp3");

    return (
        <>
            <Flex>
                <Box>
                    <Button
                        variant="ghost"
                        p="4"
                        size="lg"
                        onMouseEnter={() => play()}
                        onMouseLeave={() => stop()}>
                        Welcome to Interactive Learning Application
                    </Button>
                </Box>
            </Flex>
        </>
    );
}

方案2:使用相对路径导入

如果坚持要通过导入方式引用文件,可使用相对路径指向public目录下的音频文件(你的Introduction.js在components/目录,所以相对路径为../public/audio/intro.mp3):

import React from "react";
import { Button, Flex, Box, WrapItem } from "@chakra-ui/react";
import useSound from "use-sound";
// 使用相对路径导入
import Intro from "../public/audio/intro.mp3";

export default function Introduction() {
    const [play, { stop }] = useSound(Intro);

    return (
        <>
            <Flex>
                <Box>
                    <Button
                        variant="ghost"
                        p="4"
                        size="lg"
                        onMouseEnter={() => play()}
                        onMouseLeave={() => stop()}>
                        Welcome to Interactive Learning Application
                    </Button>
                </Box>
            </Flex>
        </>
    );
}

方案3:配置绝对路径别名(适合大型项目)

在项目根目录创建jsconfig.json文件,配置路径别名让/audio指向public/audio,这样原导入语句可正常使用:

{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "/audio/*": ["public/audio/*"]
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:45:30