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
相关产品推荐
相关产品推荐

