webpack使用svg-sprite-loader详解
总结下svg-sprite-loader的使用以及配置过程中遇到的不懂的地方
创建svgIcon组件
<template> <svg :class="svgClass" aria-hidden="true" v-on="$listeners"> <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' } } }, mounted () { // console.log(111, this.iconClass) } } </script> <style scoped> .svg-icon { width: 1em; height: 1em; vertical-align: -0.15em; fill: currentColor; overflow: hidden; } </style>
创建icons文件夹放入svg图片
> index.js
1
import Vue from 'vue' import svgIcon from '../components/SvgIcon' Vue.component('svg-icon', svgIcon) // 注册全局组件 const req = require.context('./svg', false, /\.svg$/) const requireAll = requireContext => requireContext.keys().map(requireContext) requireAll(req)
const req = require.context(’./svg’,false, /.svg$/)
第一个参数表示相对的文件目录,第二个参数表示是否包括子目录中的文件,第三个参数表示引入的文件匹配的正则表达式
const requireAll = requireContext => requireContext.keys().map(requireContext)
这个是webpack提供的require方法, 可以创建上下文环境, 相当于将svg目录下的svg文件require进来
最后把这个js 导入到工程的入口文件main.js中
下载安装插件
cnpm install --save svg-sprite-loader
修改配置webpack中webpack.base.conf.js
{ test: /\.svg$/, loader: 'svg-sprite-loader', include: [resolve('src/icons')], options: { symbolId: 'icon-[name]' } }, { test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, loader: 'url-loader', exclude: [resolve('src/icons')], options: { limit: 10000, name: utils.assetsPath('img/[name].[hash:7].[ext]') } }
插件使用
<svg-icon icon-class="documentation" class="test"/>
1
使用svg的好处
页面代码清爽
可使用ID随处重复调用
每个SVG图标都可以更改大小颜色
原文链接:https://blog.csdn.net/qq867263657/article/details/88529356