Detaillierte grafische Erklärung zur Verwendung von SVG im Vue3+Vite-Projekt

Detaillierte grafische Erklärung zur Verwendung von SVG im Vue3+Vite-Projekt

Heute habe ich bei der Verwendung von SVG in der Praxis des VUE3 + VITE-Projekts festgestellt, dass die vorherige Schreibmethode nicht verwendet werden kann. Die vorherige Verwendungsmethode bezieht sich auf die elegante Verwendung von SVG in VUE2

const req = require.context('./icons/svg', false, /\.svg$/)
const erfordertAlles = erfordertInhalt => erfordertInhalt.keys().map(erfordertInhalt)
erfordernAlles(req)

Dann habe ich nach verschiedenen Materialien gesucht und es schließlich realisiert. Ohne weitere Umschweife hier der Code:

Schritt 1: Dateiverzeichnis

Schritt 2: Installieren Sie svg-sprite-loader

npm installiere svg-sprite-loader -D
# über Garn
Garn fügt SVG-Sprite-Loader hinzu -D

Schritt 3: Erstellen Sie die Datei svgIcon.vue

   <Vorlage>
  <svg :class="svgClass" v-bind="$attrs" :style="{color: color}">
    <use :xlink:href="iconName" rel="external nofollow" />
  </svg>
</Vorlage>

<Skript-Setup>


importiere { defineProps, berechnet } von "vue";

const props = defineProps({
  Name: {
      Typ: Zeichenfolge,
      erforderlich: true
    },
    Farbe:
      Typ: Zeichenfolge,
      Standard: ''
    }
})

const iconName = berechnet(()=>`#icon-${props.name}`);
const svgClass = berechnet(()=> {
  console.log(Eigenschaftenname, 'Eigenschaftenname');
  wenn (Eigenschaften.Name) {
        gibt `svg-icon icon-${props.name}` zurück
      }
      gib 'svg-icon' zurück
});
</Skript>

<style lang='scss'>
.svg-Symbol {
  Breite: 1em;
  Höhe: 1em;
  füllen: aktuelle Farbe;
  vertikale Ausrichtung: Mitte;
}
</Stil>

Schritt 4: Erstellen Sie einen Symbolordner zum Speichern von SVG-Dateien

Schritt 5: SVG-Symbolkomponente global in main.js einfügen

importiere { createApp } von 'vue'
App aus „./App.vue“ importieren

importiere svgIcon aus „./components/svgIcon.vue“

App erstellen(App).Komponente('svg-icon', svgIcon).mount('#app');

Schritt 6: Erstellen Sie svgBuilder.js im Plugins-Ordner (hier kommt der entscheidende Punkt), TS-Versionsreferenz: https://github.com/JetBrains/svg-sprite-loader/issues/434

importiere { readFileSync, readdirSync } von 'fs'

let idPerfix = ''
const svgTitle = /<svg([^>+].*?)>/
const clearHeightWidth = /(Breite|Höhe)="([^>+].*?)"/g

const hasViewBox = /(viewBox="[^>+].*?")/g

const clearReturn = /(\r)|(\n)/g

Funktion findSvgFile(dir) {
  const svgRes = []
  const dirents = readdirSync(dir, {
    mitDateitypen: true
  })
  für (const dirent von dirents) {
    wenn (dirent.isDirectory()) {
      svgRes.push(...findSvgFile(dir + dirent.name + '/'))
    } anders {
      const svg = readFileSync(dir + dirent.name)
        .toString()
        .replace(clearReturn, '')
        .replace(svgTitle, ($1, $2) => {
          // konsole.log(++i)
          // konsole.log(dirent.name)
          lass Breite = 0
          sei Höhe = 0
          lass Inhalt = $2.replace(
            klareHöheBreite,
            (s1, s2, s3) => {
              wenn (s2 === 'Breite') {
                Breite = s3
              } sonst wenn (s2 === 'Höhe') {
                Höhe = s3
              }
              zurückkehren ''
            }
          )
          wenn (!hasViewBox.test($2)) {
            Inhalt += `viewBox="0 0 ${width} ${height}"`
          }
          gibt `<symbol id="${idPerfix}-${dirent.name.replace(
            '.svg',
            ''
          )}" ${content}>`
        })
        .replace('</svg>', '</symbol>')
      svgRes.push(svg)
    }
  }
  svgRes zurückgeben
}

export const svgBuilder = (Pfad, Perfix = 'Symbol') => {
  wenn (Pfad === '') return
  idPerfix = Perfix
  const res = findSvgFile(Pfad)
  // console.log(Res.Länge)
  // const res = []
  zurückkehren {
    Name: "svg-transform",
    transformIndexHtml(html) {
      html.replace( zurückgeben
        '<Text>',
        `
          <Text>
            <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="position: absolute; breite: 0; höhe: 0">
              ${res.join('')}
            </svg>
        `
      )
    }
  }
}

Schritt 7: Ändern Sie abschließend die Konfiguration in vite.config.js

importiere { svgBuilder } aus './src/plugins/svgBuilder'; 

exportiere Standard-DefineConfig({
  Plugins: [svgBuilder('./src/icons/svg/')] // Alle SVG-Dateien unter src/icons/svg/ wurden hierher importiert, sie müssen nicht separat importiert werden})

Zusammenfassen

Dies ist das Ende dieses Artikels zur Verwendung von SVG in Vue3+Vite-Projekten. Weitere relevante Inhalte zur Verwendung von SVG in Vue3+Vite finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung des mobilen Projekts vite2.0 + vue3

<<:  CSS-Pixel und Lösungen für verschiedene Probleme bei der Anpassung mobiler Bildschirme

>>:  So verwenden Sie die Shell, um Batchvorgänge auf mehreren Servern auszuführen

Artikel empfehlen

So installieren Sie Linux Flash

So installieren Sie Flash unter Linux 1. Besuchen...

Analyse der gemeinsamen Indexfunktion von MySQL und Anwendungsbeispiele

Dieser Artikel veranschaulicht anhand von Beispie...

js zur Implementierung eines Web-Rechners

Wie erstelle ich mit HTML, CSS und JS einen einfa...

Schreiben Sie einen formellen Blog mit XHTML CSS

Der vollständige Name von Blog sollte Weblog sein...

Node.js implementiert die Wiederaufnahme von Haltepunkten

Inhaltsverzeichnis Lösungsanalyse Scheibe Lebensl...

Sprungcode für HTML-Seite

Speichern Sie den folgenden Code als Standard-Home...