本文共 2123 字,大约阅读时间需要 7 分钟。
在 Vue 项目中优化 SVG 图标加载,可以通过两种主要方式实现:使用 svg-sprite-loader 和 vue2-svg-icon。以下是具体的实现步骤和代码示例。
svg-sprite-loadernpm install svg-sprite-loader --save-dev
vue2-svg-iconnpm install vue2-svg-icon --save-dev
在 build/webpack.base.conf.js 中添加以下配置:
{ test: /\.svg$/, loader: 'svg-sprite-loader', include: [resolve('src/icons')], options: { symbolId: 'icon-[name]' // 生成的 ID 会去掉 "svg" 前缀 }},{ 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-sprite-loader)在 Vue 组件中使用:
创建 src/icons/svg 文件夹,存放所有 SVG 图标。
index.js 中注册组件import Vue from 'vue'import SvgIcon from '@/components/SvgIcon'// 注册 SVG 组件Vue.component('svg-icon', SvgIcon)// 自动导入 SVG 文件const req = require.context('./svg', false, /\.svg\$/)const requireAll = requireContext => requireContext.keys().map(requireContext)requireAll(req) main.js 中引入import Vue from 'vue'import App from './App'import router from './router'// 引入 SVG 组件import './icons'Vue.config.productionTip = falsenew Vue({ el: '#app', router, components: { App }, template: ' '}) 在 index.js 中:
import Vue from 'vue'import SvgIcon from '@/components/SvgIcon'Vue.component('svg-icon', SvgIcon)// 自动导入所有 SVG 文件const req = require.context('./svg', false, /\.svg\$/)const requireAll = requireContext => requireContext.keys().map(requireContext)requireAll(req) vue2-svg-icon 的第二种方法npm install vue2-svg-icon --save-dev
main.js 中注册组件import Vue from 'vue'import App from './App'import router from './router'// 导入 SVG 组件import Icon from 'vue2-svg-icon/Icon'Vue.component('icon', Icon)// 注意:默认存储位置为 `assets/svg/`,请确保路径正确 props 传递。svg-sprite-loader,生产环境中可以考虑优化 SVG 文件,减少 HTTP 请求。通过以上方法,可以高效地在 Vue 项目中使用 SVG 图标,同时优化加载性能。
转载地址:http://bakh.baihongyu.com/