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

如何在Nuxt3/Vue3项目中同时引入Vuetify3组件与实验室组件?

问题:Nuxt3 + Vuetify3全局注册实验室组件后基础组件无法解析

环境

  • Nuxt: 3.6.5
  • Vuetify: 3.3.9

package.json

{
  "name": "nuxt-app",
  "private": true,
  "scripts": {
    "build": "nuxt build",
    "dev": "nuxt dev",
    "generate": "nuxt generate",
    "preview": "nuxt preview",
    "postinstall": "nuxt prepare"
  },
  "devDependencies": {
    "@iconify/vue": "^4.1.1",
    "@nuxt/devtools": "latest",
    "@types/node": "^18",
    "nuxt": "^3.6.5"
  },
  "dependencies": {
    "@mdi/font": "^7.2.96",
    "mdi": "^2.2.43",
    "mitt": "^3.0.1",
    "sass": "^1.63.6",
    "vuetify": "^3.3.9"
  }
}

我知道可以在使用v-data-table、v-data-table-server等实验室组件的页面里直接导入:

import { VDataTable, VDataTableServer } from 'vuetify/labs/VDataTable'

但不想在每个用到实验室组件的页面重复写这段代码,所以尝试在plugins/vuetify.ts里全局配置,调整后的文件内容如下:

调整后的plugins/vuetify.ts

import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
import * as labsComponents from 'vuetify/labs/components'
  
import '@mdi/font/css/materialdesignicons.css'
import {aliases, mdi} from "vuetify/iconsets/mdi";

export default defineNuxtPlugin(nuxtApp => {
    const vuetify = createVuetify({
        ssr: true,
        components: {
            components,
            labsComponents
        },
        directives,
    
        icons: {
            defaultSet: 'mdi',
            aliases,
            sets: {
                mdi
            }
        }
    })
    
    nuxtApp.vueApp.use(vuetify)
})

启动项目后出现一堆组件解析失败的警告:

[Vue warn]: Failed to resolve component: v-window                                                                                                       8:02:18 AM
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
[Vue warn]: Failed to resolve component: v-window-item                                                                                                  8:02:18 AM
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
[Vue warn]: Failed to resolve component: v-app                                                                                                          8:02:18 AM
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
[Vue warn]: Failed to resolve component: v-system-bar                                                                                                   8:02:18 AM
If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.
[Vue warn]: Failed to resolve component: v-app-bar    
.....
.....          

正确配置方案

问题出在组件注册的写法上,当前把components和labsComponents作为对象属性传入,导致Vuetify基础组件没有被正确展开注册。正确做法是用对象展开运算符,将两类组件合并为一个对象:

修改plugins/vuetify.ts中的components配置部分:

components: {
  ...components,
  ...labsComponents
},

完整正确配置代码:

import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'
import * as labsComponents from 'vuetify/labs/components'
  
import '@mdi/font/css/materialdesignicons.css'
import { aliases, mdi } from "vuetify/iconsets/mdi";

export default defineNuxtPlugin(nuxtApp => {
    const vuetify = createVuetify({
        ssr: true,
        components: {
            ...components,
            ...labsComponents
        },
        directives,
    
        icons: {
            defaultSet: 'mdi',
            aliases,
            sets: {
                mdi
            }
        }
    })
    
    nuxtApp.vueApp.use(vuetify)
})

修改后,Vuetify基础组件和实验室组件都会被正确全局注册,组件解析失败的警告会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 17:33:10