본문 바로가기
Nuxt

[Nuxt] Nuxt3에서 Vuetify + mdi 사용하기

by greeng00se 2022. 7. 7.

Vuetify

  • Vue.js 기반의 UI 프레임워크다.
  • Material Design Spec에 따라 개발되었다.
  • 현재 2.x.x 버전은 Vue3를 지원하지 않기 때문에 Nuxt3에서는 Vuetify 3버전 이상을 사용해야 한다.
  • 아래 설정한 내용은 Github에서 확인할 수 있다.

Vuetify 설치

  • sass와 vuetify 최신 버전을 설치해야 한다.
yarn add vuetify@next sass
  • 설치를 하고 나면 package.json파일이 아래와 유사한 형태가 될 것이다.
{
  "private": true,
  "scripts": {
    "build": "nuxt build",
    "dev": "nuxt dev",
    "generate": "nuxt generate",
    "preview": "nuxt preview"
  },
  "devDependencies": {
    "nuxt": "3.0.0-rc.4"
  },
  "dependencies": {
    "sass": "^1.53.0",
    "vuetify": "^3.0.0-beta.4"
  }
}

플러그인 설정

  • nuxt3에서 사용하려면 플러그인 설정을 해야 한다.
  • nuxt에서 플러그인의 경우 plugins 폴더 아래 위치한다.
  • plugins/vuetify.js 파일을 생성 한 후 아래와 같이 입력하고 저장한다.
import { createVuetify } from 'vuetify'
import * as components from 'vuetify/components'
import * as directives from 'vuetify/directives'

export default defineNuxtPlugin(nuxtApp => {
  const vuetify = createVuetify({
    components,
    directives,
  })

  nuxtApp.vueApp.use(vuetify)
})

nuxt 설정

  • nuxt.config.ts를 아래와 같이 설정해주면 vuetify를 사용할 수 있다.
import { defineNuxtConfig } from 'nuxt'

export default defineNuxtConfig({
  css: ['vuetify/lib/styles/main.sass'],
  build: {
    transpile: ['vuetify'],
  },
  vite: {
    define: {
      'process.env.DEBUG': false,
    },
  },
})

mdi 설정

  • Material Design Icon을 사용하려면 다음과 같이 mdi를 설치해야 한다.
  • 기존 mdi 패키지의 경우 deprecated 되었기 때문에 @mdi/font를 설치해야 한다.
yarn add @mdi/font

nuxt mdi 설정

  • nuxt 설정파일의 css 부분에 경로만 추가해주면 된다.
    • @mdi/font/css/materialdesignicons.min.css
import { defineNuxtConfig } from 'nuxt'

// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
  css: ['vuetify/lib/styles/main.sass', '@mdi/font/css/materialdesignicons.min.css'],
  build: {
    transpile: ['vuetify'],
  },
  vite: {
    define: {
      'process.env.DEBUG': false,
    },
  },
})

Vuetify 사용

  • pages 폴더 아래 index.vue 파일을 생성해서 동작하는지 확인할 수 있다.
<template>
  <div class="d-flex align-center flex-column">
    <v-icon large color="green darken-2">mdi-domain</v-icon>
    <v-btn
      color="primary"
      elevation="2"
      outlined
      rounded
    >Click</v-btn>
  </div>
</template>

참고 자료