svg-sprite-loaderПлагин для автоматического создания из импортированных файлов svgsymbol
тег и вставьте html, то вы сможете легко использовать в шаблоне технологию svg-sprite.
Преимущества использования svg-спрайта
Если вы не знаете, что такое svg-sprite, вы можете обратиться к статье Zhang Xinxu:Будущее должно быть жарким: внедрение технологии SVG Sprite
- чистый код страницы
- Можно многократно вызывать в любом месте, используя идентификатор
- Каждая иконка SVG может менять размер и цвет.
Установить плагин
npm install svg-sprite-loader --save-dev
Для настройки веб-пакета добавьте загрузчик, который обрабатывает svg, в Vue.config.js:
const path = require('path')
function resolve(dir) {
return path.join(__dirname, '.', dir)
}
module.exports = {
chainWebpack: config => {
config.module.rules.delete("svg"); //重点:删除默认配置中处理svg,
//const svgRule = config.module.rule('svg')
//svgRule.uses.clear()
config.module
.rule('svg-sprite-loader')
.test(/\.svg$/)
.include
.add(resolve('src/icons')) //处理svg目录
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
})
},
configureWebpack: () => ({
// resolve: {
// alias: require('./alias.config').webpack
// }
// module: {
// rules: [{
// test: /\.svg$/,
// use: [{
// loader: "svg-sprite-loader",
// options: {
// symbolId: 'icon-[name]'
// }
// }]
// }]
// }
})
}
В это время я узнал, что он все еще не работает.body
не видел вsymbol
Этикетка.
То есть через svg-sprite-loader нужно пройти только те файлы svg, которые мы ввели сами, затем эти файлы svg помещаются в одну директорию, я помещаю их в src/icons.
Затем вам нужно ввести требуемый svg, где он используется
import './src/icon/target.svg';
Перезапустил проект и наконец увидел его в htmlsymbol
Этикетка!
После настройки вы можете использовать его. Способ использования очень прост, по сравнению с оригинальным методом вставки svg иконок (img src или запись всего svg в html), использование svg-sprite проще и чище:
|
|
Ну, только одна такая строчка.xlink:href
Просто передайте идентификатор svg в приведенном выше файле конфигурации, потому что в приведенном выше файле конфигурации мы напрямую используем имя файла какsymbol
, поэтому переданный здесь идентификатор является именем файла svg значка, который вы хотите отобразить, не забудьте добавить#
.
автоматический импорт
Вы обнаружите, что если вы хотите вставить сюда иконку, вам нужноimport
, слишком хлопотно повторять этот процесс каждый раз, когда вы его используете, поэтому давайте позволим файлам svg в src/icons/svg/ импортироваться автоматически.
webpack может помочь нам сделать:
|
Пример кода:
Сначала введите import './icons/index' в main.ts,
icons/index.js, импортируйте все svg в icons/svg и зарегистрируйте глобальный компонент SvgIcon
//SvgIcon组件代码
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName"/>
</svg>
</template>
<script>
export default {
name: 'SvgIcon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String,
default: ''
}
},
computed: {
iconName() {
return `#icon-${this.iconClass}`
},
svgClass() {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
}
}
}
</script>
<style scoped>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
Затем вы можете использовать сборку
оrequire.context
Для подробного использования вы можете обратиться к документации по веб-пакету:dynamic requires
Таким образом, всякий раз, когда мы изменяем или добавляем новый svg, пока файл находится в этом каталоге, плагин автоматически сгенерирует для нас соответствующий svg.symbol
Ярлык, просто используй его