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

ElementUI-Komponente el-dropdown (Falle)

Auswählen und ändern: Klicken Sie, um den aktuell...

Interaktion im Webdesign: Eine kurze Diskussion über Paging-Probleme

Funktion: Zur vorherigen Seite oder zur nächsten ...

SQL-basierte Abfrageanweisungen

Inhaltsverzeichnis 1. Einfache SELECT-Anweisung 1...

Eine sehr detaillierte Erklärung des Linux DHCP-Dienstes

Inhaltsverzeichnis 1. DHCP-Dienst (Dynamic Host C...

Vollständige Analyse der Webseitenelemente

Relative Längeneinheiten em Beschreibung: Relative...

Einführung in die MySQL-Entsperr- und Sperrtabelle

MySQL Lock-Übersicht Im Vergleich zu anderen Date...

js, um eine einfache Produkt-Screening-Funktion zu erreichen

In diesem Artikelbeispiel wird der spezifische JS...

Einführung in den Befehl „Linux-Typversion-Speicherfestplattenabfrage“

1. Lassen Sie uns zunächst eine allgemeine Einfüh...