【vue】webpack插件svg-sprite-loader---实现自己的icon组件
引言:最近開始寫vue的項目,借鑒了一下vue-element-admin源碼,針對vue有一個關于icon圖標的處理,最近也找了很多關于vue的icon處理的解決方案,大部分都是按照之前小程序的方式直接引入iconfont項目,然后在外面封裝調用樣式就可以了。
- 按照平時導入icon的方法的話有一些已知的缺點
文檔中推薦的方式是引入svg
使用svg的優點
可以動態地使得圖標可訪問
注:文檔中關于svg的介紹
這里準備采用文檔中推薦的插件svg-sprite-loader進行介紹
注: 用來根據導入的svg文件自動生成symbol標簽并插入html,接下來就可以在模板忠方便地使用svg-sprite技術了
使用svg-sprite的好處
每個SVG圖標都可以更改大小顏色
注:張鑫旭大神的介紹-SVG Sprite技術介紹
安裝插件
webpack配置
在webpack.base.conf.js加入處理svg的loader
{test: /\.svg$/,loader: 'svg-sprite-loader',include: [resolve('src/icons')],options: {symbolId: 'icon-[name]'}}這個配置默認導入src文件下的icons文件
src/icons/index
然后運行
npm run dev報錯了,此時我們看我們的webpack配置
下面url-loader中也處理了svg文件,刪掉svg處理之后就顯示我們需要的svg了,但是之前的url是我們element-ui里生成的,需要加上symbol,不去處理src/assets/svgs路徑下的svg文件
注:require.context,webpack管理依賴
使用方法
<svg><use xlink:href="#jisuan" /></svg> import '@/assets/icons/jisuan.svg'組件化
當然,這并不是最后想要的結果,我們需要將每個svg文件整合起來組件化,這樣方便以后的調用
建立一個Icon.vue文件
<template><svg><use :xlink:href="`#${name}`"></use></svg> </template><script>export default {name: 'icon',props: {name: {type: String,required: true,},},} </script> <icon name="jisuan" />import '@/assets/icons/jisuan.svg'自動導入
這里插入每個svg圖標都需要import,在我們平時寫項目的時候js,vue文件都已經實現了自動導入,這里照葫蘆畫瓢,讓src/assets/svg里的文件自動導入
assets/icon/scan.js
const requireAll = requireContext => requireContext.keys().map(requireContext);// import all svg const req = require.context('./assets/svg', true, /\.svg$/); requireAll(req);main.js
import './assets/scan.js'參考文檔:
- https://segmentfault.com/a/1190000015367490
- https://cisy.me/webpack-svg-sprite/
轉載于:https://www.cnblogs.com/teemor/p/9565841.html
總結
以上是生活随笔為你收集整理的【vue】webpack插件svg-sprite-loader---实现自己的icon组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 商城项目开发(一)
- 下一篇: Vue-admin工作整理(四):路由组