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

Vite+Vue3使用import.meta.glob动态加载组件生产环境失效问题

问题原因

你错误使用了import.meta.glob的返回值:import.meta.glob执行后会直接返回键为源文件相对路径、值为对应异步导入函数的对象,不需要手动嵌套import(k)。你额外添加的import(k)不会被Vite构建阶段的静态分析识别,生产环境自然无法匹配到打包后的资源路径。

解决方案

直接修改main.js的注册逻辑即可,无需调整vite.config.js配置,修改后代码如下:

import { createApp, defineAsyncComponent  } from 'vue'
import App from '@/App.vue'

// 注意你原代码漏了实例创建逻辑,需补上
const app = createApp(App)

const components = Object.assign(
    import.meta.glob("./components/**/*.vue"),
    import.meta.glob("./widgets/**/*.vue")
)

for (const k in components) {
    const name = k.split("/").pop().replace('.vue', '');
    // 直接使用glob返回的异步导入函数,无需手动import
    app.component(name, defineAsyncComponent(components[k]));
}

app.mount('#app')

补充说明

  • import.meta.glob是Vite提供的构建时静态能力,会自动处理生产环境的路径映射、代码拆分,完全符合你要求的懒加载效果,未被使用的组件不会被打包进生产产物。
  • 注意避免components和widgets目录下出现同名.vue文件,同名组件会出现后者覆盖前者的问题。

内容的提问来源于stack exchange,提问作者Alper Aydingül

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:24:01