上一章更新了vite的,这一章顺便更新一下cli的吧.
安装依赖
安装svg-sprite-loader 为防报错 装一个core-js
yarn add svg-sprite-loader core-js
配置vue.confg.js
module.exports = {
chainWebpack: (config) => {
config.module.rules.delete('svg'); //重点:删除默认配置中处理svg,
config.module
.rule('svg-sprite-loader')
.test(/\.svg$/)
.include.add(resolve('src/assets/icons/svg')) //处理svg目录
.end()
.use('svg-sprite-loader')
.loader('svg-sprite-loader')
.options({
symbolId: 'icon-[name]'
});
}
}
配置组件
在svg.vue中
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName" />
</svg>
</template>
<script>
export default {
name: 'svgIcon',
props: {
name: {
type: String,
required: true
},
className: {
type: String,
default: ''
}
},
computed: {
name() {
return `#icon-${this.iconClass}`;
},
svgClass() {
if (this.className) {
return 'svg-icon ' + this.className;
} else {
return 'svg-icon';
}
}
}
};
</script>
配置js文件
const requireAll = (requireContext) =>
requireContext.keys().map(requireContext);
const req = require.context('@/assets/icons/svg', false, /\.svg$/);
requireAll(req);
全局注册并使用
import '@/components/svg-icon/index';
import SvgIcon from '@/components/svg-icon/index.vue'; // svg组件
const app = createApp(App);
// 全局注册组件
app.component('svg-icon', SvgIcon);
app.use(store).use(router).mount('#app');
<svg-icon name="add" />