nuxt-svgo-loader

SVGOで最適化を行い、SVGファイルをVueコンポーネントとしてロードするためのNuxtモジュール。

Nuxt Svgo Loader

npm versionnpm downloadsLicenseNuxt

SVGOで最適化を行い、SVGファイルをVueコンポーネントとしてロードするためのNuxtモジュール。

機能

  • 📁 SVGファイルをVueコンポーネントとしてロードします。
  • 🎨 SVGOを使用してSVGを最適化します。
  • 🔧 SVGを簡単に使用するためのマクロ<SvgoIcon>コンポーネント。
  • 🛠️ Nuxt DevToolsとのシームレスな統合。

インストール

nuxt-svgo-loaderをインストールし、nuxt.configに追加します。

npx nuxi@latest module add nuxt-svgo-loader
export default defineNuxtConfig({
  modules: ['nuxt-svgo-loader'],
  svgoLoader: {
    // Options here will be passed to `vite-svg-loader`
  },
})

!NOTE nuxt-svgo-loadervite-svg-loaderをベースにしたNuxtモジュールであるため、svgoLoaderの設定はvite-svg-loaderと全く同じです。利用可能なオプションについては、vite-svg-loaderのドキュメントをこちらで参照できます。

使用方法

SvgoIconコンポーネント

SVGアイコンを使用する最も簡単な方法は、マクロ<SvgoIcon>コンポーネントを介することです。このコンポーネントは、nameプロパティに基づいてビルド時にSVGファイルを自動的に解決し、インポートします。

<template>
  <div>
    <!-- Automatically imports ~/your-svg-folder/nuxt.svg as a component -->
    <SvgoIcon name="nuxt" width="92" height="92" fill="#00DC82" />
    
    <!-- Use strategy prop to modify SVG processing -->
    <SvgoIcon name="vue" strategy="skipsvgo" />
  </div>
</template>

<SvgoIcon>コンポーネント

  • 対応するインポートされたSVGコンポーネントに自動的に変換されます。
  • strategyプロパティ(component, skipsvgo)によるインポート戦略をサポートします。
  • 利用可能なSVG名のタイプセーフティを提供します。
  • Vue SFC <template>ブロック内でのみ機能します。

上記のテンプレートはビルド時に次のように変換されます。

<script setup lang="ts">
import NuxtSvg from '~/your-svg-folder/nuxt.svg?component'
import VueSvg from '~/your-svg-folder/vue.svg?skipsvgo'
</script>

<template>
  <div>
    <NuxtSvg width="92" height="92" fill="#00DC82" />
    <VueSvg />
  </div>
</template>

名前空間

名前空間を使用してSVGファイルを整理できます。例えば、このようなフォルダ構造がある場合

assets/
└── svg/
    ├── nuxt.svg
    └── vue.svg

nuxt.config.tsに、svgoLoader.namespacesに項目を追加します。

export default defineNuxtConfig({
  modules: ['nuxt-svgo-loader'],
  svgoLoader: {
    namespaces: [
      {
        prefix: 'my-icon',
        dir: './app/assets/svg',
      },
    ],
  },
})

その後、アイコンを次のように使用できます。

<template>
  <div>
    <SvgoIcon name="my-icon:nuxt" width="92" height="92" fill="#00DC82" />
    <SvgoIcon name="my-icon:vue" strategy="skipsvgo" />
  </div>
</template>

デフォルトでは、namespacesは無効になっています。app/以下のすべてのSVGファイルがスキャンされます。namespacesが有効な場合、指定されたディレクトリのみが含まれます。

手動インポート

コンポーネント

SVGは、?componentサフィックスを使用して、Vueコンポーネントとして明示的にインポートできます。

import NuxtSvg from '~/assets/svg/nuxt.svg'
// <NuxtSvg />

URL

SVGは、?urlサフィックスを使用して、URLとしてインポートできます。

import nuxtSvgUrl from '~/assets/svg/nuxt.svg?url'
// nuxtSvgUrl === '/_nuxt/assets/svg/nuxt.svg'

Raw

SVGは、?rawサフィックスを使用して、生文字列としてインポートできます。

import nuxtSvgRaw from '~/assets/svg/nuxt.svg?raw'
// nuxtSvgRaw === '<svg xmlns="http://www.w3.org/2000/svg" ...'

単一ファイルのSVGOをスキップ

?skipsvgoサフィックスを追加することで、単一ファイルのSVGOを明示的に無効にできます。

import NuxtSvgWithoutOptimizer from '~/assets/svg/nuxt.svg?skipsvgo'
// <NuxtSvgWithoutOptimizer />

DevTools

このモジュールは、SVGファイルを検査できる新しいタブをNuxt DevToolsに追加します。

ライセンス

MITライセンス © 2023-PRESENT Alex Liu