1.先安装svg-sprite-loader插件,
npm install svg-sprite-loader --save-dev
2.在src/assets目录下创建svg目录和index.js
3.在components目录下新建svg组件(SvgIcon),并加入以下代码
<template>
<svg :class="svgClass" aria-hidden="true">
<!-- aria-hidden="true"为避免现代辅助技术错误的朗读该元素而产生的标签属性 -->
<!-- xlink:href="iconName"为引入svg图片的名字 -->
<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>
4.在webpack.base.conf.js中:
{
test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
loader: 'url-loader',
exclude: [resolve('src/assets/svg')],//清除webpack自身默认处理svg图片的方式(踩坑:不清除默认处理方式会出大问题!!显示不出来,因为被覆盖了!!!)
options: {
limit: 10000,
name: utils.assetsPath('img/[name].[hash:7].[ext]')
}
},
{
test: /\.svg$/,
loader: 'svg-sprite-loader',
include: [resolve("src/assets/svg")], //新建svg-sprite-loader处理svg图片方式
options: {
symbolId: 'icon-[name]'
}
},
5.在第2步新建的index.js中写入以下代码:
import Vue from 'vue'
import SvgIcon from '@/components/SvgIcon/SvgIcon'// svg component
// register globally
Vue.component('svg-icon', SvgIcon)
//相当于监听的SvgIcon组件中的use属性,并自动导入对应svg所在的路径
const req = require.context('./svg', false, /\.svg$/)//在svg目录下,不检索目录下的子文件,匹配文件的正则表达式
const requireAll = requireContext => requireContext.keys().map(requireContext)//函数返回值(要导入的文件或目录)
requireAll(req)//导入已svg结尾的所有图片
6.把index.js所在目录全部导入main.js当中
7.引入svg文件:
<svg-icon icon-class = "Your-Icon-Name" />
继续填坑!!!哈哈哈哈哈哈哈哈,我最喜欢填坑啦,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈,我爱死webpack啦!!!!!!!!!!!!!!!!!