SVGスプライト
pluginSprite()は同じディレクトリのSVGを一つのスプライトファイルへまとめます。各アイコンはHTMLのuse要素から参照するため、複数ページで同じアイコンを使う構成に適しています。
SVG最適化はページ内へ図形を展開する方法、このページは外部のSVGファイルを共有する方法です。両方を使う場合は対応するプラグインをそれぞれ追加します。
Table of Contents
プラグインを追加する
import { defineConfig, pluginSsg, pluginSprite } from "minista"
export default defineConfig({
plugins: [pluginSsg(), pluginSprite()],
})アイコンをまとめる
src/assets/icons/を作り、次の二つのSVGを配置します。
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path fill="currentColor" d="M4 4h16v16H4z" />
</svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<circle fill="currentColor" cx="12" cy="12" r="8" />
</svg>src/
├── assets/
│ └── icons/
│ ├── square.svg
│ └── circle.svg
└── pages/
└── index.tsxSpriteで参照する
import { Sprite } from "minista/assets"
export default function Page() {
return (
<>
<h1>My Site</h1>
<Sprite src="/src/assets/icons/square.svg" title="四角" width={24} height={24} />
<Sprite src="/src/assets/icons/circle.svg" title="丸" width={24} height={24} />
</>
)
}参照したディレクトリのSVGがまとめられます。ディレクトリ名が出力ファイルの基になる名前、拡張子を除いたファイル名がsymbolのIDになります。
ビルド結果を確認する
dist/
├── index.html
└── assets/
└── icons-[hash].svg出力HTMLは次のようにスプライトを参照します。実際の属性やファイル名は設定によって変わります。
<svg viewBox="0 0 24 24" width="24" height="24">
<use href="/assets/icons-[hash].svg#square"></use>
</svg>SVGを最適化したうえでsymbolへ変換し、共通の出力へまとめます。公開時にはHTMLだけでなく、スプライトファイルも一緒に配置してください。
既存スプライトを使う
symbolを含む既存のSVGも、同じディレクトリへ置けます。この場合は使いたいIDをsymbolIdで指定します。
<Sprite
src="/src/assets/icons/common.svg"
symbolId="arrow-right"
width={24}
height={24}
/>この例にはarrow-rightというsymbolを持つcommon.svgが必要です。同じ出力内でIDが重複するとビルドが停止するため、ファイル名や既存のIDを一意にします。
設定値、内部IDの扱い、SVGOの制約はpluginSpriteを参照してください。
次はIslandで、操作できるUIを追加します。