|
1 | | -# vue-svg-loader <img src="https://img.shields.io/npm/dt/vue-svg-loader.svg"> |
2 | | -A webpack loader that allows to use SVG files as Vue Components. |
| 1 | +<p align="center"><img src="docs/.vuepress/public/logo.svg" width="40%"></p> |
| 2 | +<h1 align="center">vue-svg-loader</h1> |
| 3 | +<p align="center">webpack loader that lets you use SVG files as Vue components</p> |
| 4 | +<hr> |
| 5 | +<p align="center"> |
| 6 | + <a href="https://vue-svg-loader.js.org">Documentation</a> - |
| 7 | + <a href="https://vue-svg-loader.js.org/faq.html">FAQ</a> |
| 8 | +</p> |
3 | 9 |
|
4 | 10 | ## Installation |
5 | | -``` |
6 | | -npm install --save-dev vue-svg-loader |
| 11 | +``` bash |
| 12 | +npm i -D vue-svg-loader |
7 | 13 | yarn add --dev vue-svg-loader |
8 | 14 | ``` |
9 | 15 |
|
10 | | -## Configuration |
11 | | -```js |
12 | | -{ |
13 | | - test: /\.svg$/, |
14 | | - loader: 'vue-svg-loader', // `vue-svg` for webpack 1.x |
15 | | - options: { |
16 | | - // optional [svgo](https://github.com/svg/svgo) options |
17 | | - svgo: { |
18 | | - plugins: [ |
19 | | - {removeDoctype: true}, |
20 | | - {removeComments: true} |
21 | | - ] |
22 | | - } |
23 | | - } |
24 | | -} |
| 16 | +## Basic configuration |
| 17 | +### webpack |
| 18 | +``` js |
| 19 | +module.exports = { |
| 20 | + module: { |
| 21 | + rules: [ |
| 22 | + { |
| 23 | + test: /\.svg$/, |
| 24 | + loader: 'vue-svg-loader', |
| 25 | + }, |
| 26 | + ], |
| 27 | + }, |
| 28 | +}; |
| 29 | +``` |
| 30 | +### Vue CLI |
| 31 | +``` js |
| 32 | +module.exports = { |
| 33 | + chainWebpack: (config) => { |
| 34 | + const svgRule = config.module.rule('svg'); |
| 35 | + |
| 36 | + svgRule.uses.clear(); |
| 37 | + |
| 38 | + svgRule |
| 39 | + .use('vue-svg-loader') |
| 40 | + .loader('vue-svg-loader'); |
| 41 | + }, |
| 42 | +}; |
25 | 43 | ``` |
26 | 44 |
|
27 | | -## Example code |
| 45 | +### Nuxt.js |
| 46 | +``` js |
| 47 | +module.exports = { |
| 48 | + build: { |
| 49 | + extend: (config) => { |
| 50 | + const svgRule = config.module.rules.find(rule => rule.loader === 'url-loader'); |
28 | 51 |
|
29 | | -```html |
| 52 | + svgRule.test = /\.(png|jpe?g|gif)$/; |
| 53 | + |
| 54 | + config.module.rules.push({ |
| 55 | + test: /\.svg$/, |
| 56 | + loader: 'vue-svg-loader', |
| 57 | + }); |
| 58 | + }, |
| 59 | + }, |
| 60 | +}; |
| 61 | +``` |
| 62 | + |
| 63 | +## Example usage |
| 64 | +``` vue |
30 | 65 | <template> |
31 | | - <nav id="menu"> |
32 | | - <a href="..."> |
33 | | - <SomeIcon class="icon" /> |
34 | | - Some page |
| 66 | + <nav> |
| 67 | + <a href="https://github.com/vuejs/vue"> |
| 68 | + <VueLogo /> |
| 69 | + Vue |
| 70 | + </a> |
| 71 | + <a href="https://github.com/svg/svgo"> |
| 72 | + <SVGOIcon /> |
| 73 | + SVGO |
| 74 | + </a> |
| 75 | + <a href="https://github.com/webpack/webpack"> |
| 76 | + <WebpackIcon /> |
| 77 | + webpack |
35 | 78 | </a> |
36 | 79 | </nav> |
37 | 80 | </template> |
38 | | - |
39 | 81 | <script> |
40 | | -import SomeIcon from './assets/some-icon.svg'; |
| 82 | +import VueLogo from './public/vue.svg'; |
| 83 | +import SVGOIcon from './public/svgo.svg'; |
| 84 | +import WebpackIcon from './public/webpack.svg'; |
41 | 85 |
|
42 | 86 | export default { |
43 | | - name: 'menu', |
| 87 | + name: 'Example', |
44 | 88 | components: { |
45 | | - SomeIcon, |
| 89 | + VueLogo, |
| 90 | + SVGOIcon, |
| 91 | + WebpackIcon, |
46 | 92 | }, |
47 | 93 | }; |
48 | 94 | </script> |
49 | 95 | ``` |
50 | | ---- |
51 | | -*The idea behind this was inspired by [react-svg-loader](https://github.com/boopathi/react-svg-loader)*. |
|
0 commit comments