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

Erfahrung mit parallelen React-Funktionen (gleichzeitiger Front-End-Modus)

React ist eine Open-Source-JavaScript-Bibliothek,...

Detaillierte Analyse des MySQL 8.0-Speicherverbrauchs

Inhaltsverzeichnis 1. innodb_buffer_pool_size 2. ...

Detailliertes Installationstutorial von Docker unter CentOS

Docker ist in CE und EE unterteilt. Die CE-Versio...

JavaScript implementiert einfache Rechnerfunktion

In diesem Artikel wird der spezifische JavaScript...

Zusammenfassung des MySQL Undo Log und Redo Log

Inhaltsverzeichnis Undo-Protokoll Erstellung und ...

Vue implementiert die vollständige Auswahlfunktion

In diesem Artikelbeispiel wird der spezifische Co...

Detaillierter Beispielcode einer MySQL-Batch-Einfügeschleife

Hintergrund Als ich vor einigen Tagen Paging in M...

Schritte zum Erstellen eines Dateiservers mit Apache unter Linux

1. Über den Dateiserver Wenn Sie in einem Projekt...

Mit CSS3 erstellter Hintergrundverlaufsanimationseffekt

Ergebnisse erzielen Implementierungscode html <...

CSS3-Kategoriemenüeffekt

Die CSS3-Kategoriemenüeffekte sind wie folgt: HTM...

MySQL Infobright-Installationsschritte

Inhaltsverzeichnis 1. Verwenden Sie den Befehl „r...

Spezifische Verwendung des Stapelkontexts in CSS

Vorwort Unter dem Einfluss einiger CSS-Interaktio...