一、在vue腳手架生成的文件夾下的src/components創(chuàng)建一個(gè)Svg
<template>
<svg :class="svgClass" aria-hidden="true">
<use :xlink:href="iconName"></use>
</svg>
</template>
<script type="text/ecmascript-6">
export default {
name: 'svg-icon',
props: {
iconClass: {
type: String,
required: true
},
className: {
type: String
}
},
computed: {
iconName () {
return `#icon-${this.iconClass}`
},
svgClass () {
if (this.className) {
return 'svg-icon ' + this.className
} else {
return 'svg-icon'
}
}
}
}
</script>
<style>
.svg-icon {
width: 1em;
height: 1em;
vertical-align: -0.15em;
fill: currentColor;
overflow: hidden;
}
</style>
二、使用和安裝svg-sprite
- 這里使用webpack loader中的一個(gè)svg-sprite-loader,可以將多個(gè)svg打包成svg-spite
1、安裝
npm install svg-sprire-loader --save-dev
2、配置 build/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]')
}
},
四、自動(dòng)導(dǎo)入
- 自動(dòng)導(dǎo)入需要用到webpack的require context
// require.context的簡(jiǎn)單介紹
require.context("./file", false, /.file.js$/);
這行代碼就會(huì)去 file 文件夾(不包含子目錄)下面的找所有文件名以 .file.js 結(jié)尾的文件能被 require 的文件。就是說可以通過正則匹配引入相應(yīng)的文件模塊。
// require.context有三個(gè)參數(shù):
directory:說明需要檢索的目錄
useSubdirectories:是否檢索子目錄
regExp: 匹配文件的正則表達(dá)式
- 在src/icons/index.js使用require context
import Vue from 'vue'
import SvgIcon from '../components/SvgIcon.vue'
Vue.component('svg-icon', SvgIcon)
const requireAll = requireContext => requireContext.keys().map(requireContext)
const req = require.context('./svg', false, /\.svg$/)
requireAll(req)
五、在main.js中引入
import '@/icons'
六、在src/icons/svg下面的各個(gè)文件
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。