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

Laravel 9 + Vuetify 3环境下@mdi/js无法使用的问题求助

解决Laravel 9 + Vuetify 3中@mdi/js与v-icon配合失效的问题

问题原因

当前Vuetify配置未启用@mdi/js格式的SVG图标支持,导致v-icon无法解析导入的图标路径数据。

修复步骤

1. 确保依赖安装(如未安装)

如果还未安装@mdi/js依赖,执行以下命令:

npm install @mdi/js

2. 修改Vuetify配置(app.js)

更新Vuetify初始化代码,添加图标集配置:

import './bootstrap';
import '../css/app.css';

import { createApp, h } from 'vue';
import { createInertiaApp } from '@inertiajs/inertia-vue3';
import { InertiaProgress } from '@inertiajs/progress';
import { resolvePageComponent } from 'laravel-vite-plugin/inertia-helpers';
import { ZiggyVue } from '../../vendor/tightenco/ziggy/dist/vue.m';

const appName = window.document.getElementsByTagName('title')[0]?.innerText || 'Laravel';

// Vuetify
import 'vuetify/styles'
import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
// 新增:导入mdi-svg图标集配置
import { aliases, mdi } from 'vuetify/iconsets/mdi-svg'

const vuetify = createVuetify({
  components,
  directives,
  // 新增:配置图标集
  icons: {
    defaultSet: 'mdi-svg',
    aliases,
    sets: {
      mdi,
    },
  },
})

createInertiaApp({
    title: (title) => `${title} - ${appName}`,
    resolve: (name) => resolvePageComponent(`./Pages/${name}.vue`, import.meta.glob('./Pages/**/*.vue')),
    setup({ el, app, props, plugin }) {
        return createApp({ render: () => h(app, props) })
            .use(plugin)
            .use(ZiggyVue, Ziggy)
            .use(vuetify)
            .mount(el);
    },
});

3. 组件用法保持不变

你的组件代码无需修改,当前导入和使用方式是正确的:

<script setup>
    import { mdiAccount } from '@mdi/js'
</script>

<template>
    <v-icon :icon="mdiAccount"></v-icon> 
</template>

原理说明

通过在createVuetify中配置icons选项,指定默认使用mdi-svg图标集,Vuetify就能正确识别从@mdi/js导入的SVG路径数据,让v-icon组件正常渲染图标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:20:27