Я всё-таки решил остаться с плагином
vite-svg-sprite-wrapper.
Только для ожидаемой работы в production-режиме нужно прибегнуть к ещё одному плагину, а именно
vite-plugin-static-copy. vite.vonfig.js выглядит так:
import { defineConfig } from 'vite';
import vue from '@vitejs/plugin-vue';
import ViteSvgSpriteWrapper from 'vite-svg-sprite-wrapper';
import viteStaticCopy from 'vite-plugin-static-copy';
import path from 'path'
export default defineConfig({
base: './',
resolve: {
alias: {'@': path.resolve(__dirname, './src')},
},
plugins: [
vue(),
ViteSvgSpriteWrapper({
outputDir: 'src/assets',
}),
viteStaticCopy({
targets: [
{
src: 'src/assets/sprite.svg',
dest: 'assets',
},
],
}),
],
})
Я создал компонент SvgIcon.vue:
<template>
<svg :width="width" :height="height">
<use :href="`/assets/sprite.svg#${name}-${width}`"></use>
</svg>
</template>
<script>
export default {
name: 'svg-icon',
props: {
name: {
type: String,
required: true,
},
width: {
type: Number,
default: 32,
},
height: {
type: Number,
default: 32,
},
},
}
</script>