透過超過 100 個訣竅來學習 Nuxt!

@nuxtjs/svg-sprite

在 Nuxt 中使用 SVG 檔案的優化且簡單的方法

SVG Sprite 模組

npm (scoped with tag)npm

在 Nuxt.js 中使用 SVG 檔案的優化且簡單的方法

Sprites 有助於提高速度、維持一致的開發流程,並使圖示的創建速度更快。 SVG sprites 通常使用形狀或形式相似的圖示建立,而較大規模的圖形則是一次性應用。

範例: https://codesandbox.io/s/github/nuxt-community/svg-sprite-module/

⚠️ 注意: SVG Sprites 不適用於 IE,如果您希望支援 IE,可以使用 svg4everybody。請查看這個議題以了解如何操作。

🌈 注意: 如果您希望載入單個 SVG 圖示,並且不想建立 sprites,請使用 Nuxt SVG 模組。適用於 Nuxt.js 的 SVG 模組允許您根據您提供的資源查詢以多種方式匯入 .svg 檔案。

安裝

yarn add @nuxtjs/svg-sprite
# or
npm i @nuxtjs/svg-sprite

使用方式

@nuxtjs/svg-sprite 加入到 nuxt.config.js 的 buildModules 部分

{
  buildModules: [
    '@nuxtjs/svg-sprite',
  ],
  svgSprite: {
    // manipulate module options
  }
}

將您的 svg 檔案放在 ~/assets/sprite/svg/ 中,例如 sample.svg,並使用全域註冊的 svg-icon 元件來使用您的圖像

<svg-icon name="sample" />

要建立不同的 sprites,請在 ~/assets/sprite/svg/ 內部建立自訂目錄,並將您的 svg 檔案放入其中,並在圖示名稱前放置目錄標題 (範例: ~/assets/sprite/svg/my-sprite/my-image.svg)

<svg-icon name="my-sprite/my-image" />

模組會建立一個頁面,列出您的所有圖示,預設情況下您可以在 /_icons 路徑中看到此頁面。
注意:此頁面是在 dev 模式下建立的,因此您無法在生產環境中看到它。

選項

模組預設選項

選項預設值描述
input~/assets/sprite/svg原始 svg 檔案的目錄
output~/assets/sprite/gen儲存產生的 sprites 的目錄
defaultSpriteicons預設 sprite 的名稱 (預設 sprite 由直接放置在 input 目錄中的所有 svg 組成)
elementClassicon所有 <svg-icon> 實例的全域類別
spriteClassPrefixsprite-sprite 特定類別的前綴
publicPathnull為 sprites 指定自訂公開路徑
iconsPath_icons圖示清單頁面的自訂路徑 (為了停用此頁面,請將 falsenull 傳遞給此選項)
svgoConfignullSVGO 的自訂設定物件,如何自訂 SVGO 設定

您可以使用 nuxt.config.js 中的 svgSprite 選項來更新它們

export default {
  buildModules: ['@nuxtjs/svg-sprite'],
  svgSprite: {
    input: '~/assets/svg/'
  }
}

Props

Prop描述
name圖示路徑格式為 SPRITE_NAME/ICON_NAME,預設 sprite 可以省略 SPRITE_NAME
title圖示的輔助功能標題,此 props 將轉換為 <svg> 內部的 <title> 標籤
desc圖示的輔助功能描述,此 props 將轉換為 <svg> 內部的 <desc> 標籤

整合

Storybook

此模組提供一個故事來列出和搜尋您專案中可用的圖示。您可以在 stories 目錄下看到故事。如果您正在使用 @nuxtjs/storybook,您可以在 storybook 中的 Modules 區段下看到 SvgSprites 故事。除非您使用 Storybook 的 modules 選項停用/隱藏故事,否則 Sprites 會顯示在您的 Storybook 中

開發

  • 複製此儲存庫
  • 使用 yarn installnpm install 安裝依賴項
  • 使用 npm run dev 啟動開發伺服器

您也可以直接使用 CodeSandBox 貢獻:https://codesandbox.io/s/github/nuxt-community/svg-sprite-module/

授權許可

MIT 授權許可 Copyright (c) Nuxt Community - Ahad Birang