# 在vue项目中使用SVG > 本文包含了在vue项目中使用SVG的方法, 包含vue2.x和vue3.x ## vue2.x使用 #c 依赖组件介绍 我们主要使用 `svg-sprite-loader` 来引入组件 使用webpack中的require.context来批量引入svg文件 #d 新旧vue cli 差异 > [新版本vue cli项目无法生效参考文章](https://juejin.cn/post/7133523073680015396) 在新版本的vue cli项目中更改了svg文件的加载方式 所以我们需要将新版本的svg加载项进行更改, 删除新增的内容 #e 配置svg文件的加载 vue.config.js 配置如下 ```js const path = require('path') function resolve(dir) { // console.log(dir); return path.join(__dirname, dir); } module.exports = defineConfig({ ...outherConfig, chainWebpack: config => { config.plugin('define').tap(args=>{ const argv = process.argv const icourt = argv[argv.indexOf('--icourt-mode') + 1] args[0]['process.env'].MODE = `"${icourt}"` return args }) const svgRule = config.module.rule('svg') svgRule.uses.clear() // 清除已有的svg loader https://juejin.cn/post/7133523073680015396 svgRule.delete('type'); svgRule.delete('generator'); svgRule.exclude.add(/noe_modules/) svgRule .test(/\.svg/) .use('svg-sprite-loader') .loader('svg-sprite-loader') .options({ symbolId: 'icon-[name]' }) const imagesRule = config.module.rule('images') imagesRule.exclude.add(resolve('./src/assets/svg')) // console.log('imagesRule',imagesRule) config.module .rule('images') .test(/\.(png|jpe?g|gif|svg)(\?.*)?$/) } }) ``` #c 注册并引用svg组件 使用 webpack 中的require.context来批量引入svg文件, 并将svg组件注册为vue组件, 这样我们就可以在项目中使用svg了 为了能够同时使用网络上的svg图标, 设置组件参数`svgHref`属性, 用于直接引入网络上的svg图标 #e 注册与组件 这里我们将svg文件统一放置于`src/assets/svg`目录中, `@`为`src`的别名(alias) iconIndex.js ```js import Vue from 'vue' import SvgIcon from './iconSvg' // svg组件 // 注册到全局 Vue.component('svg-icon', SvgIcon) const requireAll = requireContext => requireContext.keys().map(requireContext) const req = require.context('@/assets/svg', false, /\.svg$/) requireAll(req) ``` svg-icon.vue ```vue ``` #e 使用组件 在对应的svg目录放置好svg文件后, 在需要使用的地方直接调用组件即可 例如放置 user.svg, 在使用的时候只需要使用如下代码即可, `icon-class`属性填写svg文件的文件名即可 ```vue ```