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

Next.js:变量模块路径动态导入组件失败,如何用相对路径加载?

用相对路径实现组件动态导入的正确方式

你遇到的报错是因为Webpack(Next.js底层打包工具)需要在编译阶段明确动态导入的模块范围,完全动态的路径字符串(比如你用${path}这种写法)会让它无法提前解析要打包的模块,所以模块映射里找不到目标组件。

解决方法如下:

1. 直接使用固定相对路径(推荐)

根据你的目录结构,login组件位于components/page/login,hello组件在components/shared/hello.js,两者的相对路径是../../shared/hello,直接写在import里即可:

const DynamicComponent = dynamic(() => import('../../shared/hello'), {
    ssr: false,
});

return (
    <div>
        <DynamicComponent />
    </div>
);

2. 若需部分动态(保留固定前缀)

如果必须用变量动态拼接路径,一定要给Webpack留固定的前缀,让它知道要打包哪些目录下的模块,比如:

// 固定前缀为../../shared/,仅动态组件名称部分
const componentName = 'hello';
const DynamicComponent = dynamic(() => import(`../../shared/${componentName}`), {
    ssr: false,
});

核心原因是Webpack的静态分析特性:动态导入的路径不能全是变量,必须包含固定字符串片段,这样它才能在编译时把对应范围内的模块都加入打包列表,运行时才能正确加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 13:32:37