|
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