🥑

Nuxt3 × Quasar

2024/10/14に公開

前提

UIフレームワーク Quasar

  • Quasar
  • 選んだ理由
    • Vue3への対応
    • コンポーネント数が多い
    • いい感じのデザイン
    • レスポンシブ対応しやすいらしい(うわさ)

Quasar導入

パッケージインストール

npm install --save quasar @quasar/extras
npm install --save-dev @quasar/vite-plugin sass@^1.33.0

設定

nuxt.config.ts
// https://nuxt.com/docs/api/configuration/nuxt-config

import { quasar } from '@quasar/vite-plugin'

export default defineNuxtConfig({
  ssr: false,
  compatibilityDate: '2024-04-03',
  devtools: { enabled: true },
  vite: {
    server: {
        watch: {
            usePolling: true
        }
    },
// ----- ここから追加↓↓ -----------------------------
    plugins: [
      // @quasar/plugin-vite options list:
      // https://github.com/quasarframework/quasar/blob/dev/vite-plugin/index.d.ts
      quasar(),
    ],
  },
  build: {
    transpile: ["quasar"],
  },
  css: [
    // Quasarに必要なCSSを読み込むsassファイルを追加
    "~/assets/styles/quasar.sass",
  ],
// ----- ここまで追加↑↑ -----------------------------
})

assets/styles/quasar.sass
// Import icon libraries
@import '@quasar/extras/material-icons/material-icons.css'

// Import Quasar css
@import 'quasar/src/css/index.sass'
  • pluginを作成し、quesarが使える状態にする
    • nuxtがvueアプリケーション作成時に/plugins配下をロードしてくれます
    • 使うコンポーネントだけインポートした方がいいのかもしれない??
plugins/quasar.ts
import * as components from 'quasar'

export default defineNuxtPlugin((nuxtApp) => {

  nuxtApp.vueApp.use(components.Quasar, {
    plugins: {},
    components,
  });
});

使ってみる

app.vue(適当なvueファイルでOK)
<template>
  <div class="q-pa-md q-gutter-sm">
    <q-btn style="background: #FF0080; color: white" label="Fuchsia" />
    <q-btn flat style="color: #FF0080" label="Fuchsia Flat" />
    <q-btn style="background: goldenrod; color: white" label="Goldenrod" />
    <q-btn outline style="color: goldenrod;" label="Goldenrod" />
    <q-btn color="grey-4" text-color="purple" glossy unelevated icon="camera_enhance" label="Purple text" />
  </div>
</template>
  • いい感じのボタンが表示できました

備考

  • Nuxt用のModule nuxt-quasar-ui は、非公式と記載があったので利用はやめておきました

参考サイト

Discussion