Package Exports
- vue-svg-inline-loader
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (vue-svg-inline-loader) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
vue-svg-inline-loader
Webpack loader used for inline replacement of SVG images with actual content of SVG files in Vue projects.
Loader parses only HTML template format.
Loader has built-in SVGO support for SVG optimization.
Sprite option works only with Vue Single File Component approach.
Notable changes
- v1.2.17
- Add example usage configuration for laravel-mix based projects
- v 1.2.16
- Added example for quasar based projects
- v 1.2.14
- Added example for gridsome based projects
- v1.2.11
- Fixed a bug where original svg attributes were used by referencing svg rather than symbol itself. This may introduce breaking changes for developers who rely on this bugged behavior.
- v1.2.6
- Modified default value of svgo option to preserve viewBox attribute
- Modified svgo option to accept
truevalue as alias for default configuration
- v1.2.5
- Modified svgo option to accept
nullorfalsevalue for disabling SVG optimization
- Modified svgo option to accept
- v1.2.3
- v1.2.0
- Upgraded Babel to version 7
- Refactored code to ES6 syntax
- Added new option: dataAttributes
- Options are now deep-merged
- v1.1.3
- Added transpiled version of loader
- v1.1.0
- Added new option: md5
- v1.0.8
- Options structure changed, deprecated options still get parsed to new ones
- v1.0.0
- Initial release based on my img-svg-inline-loader project
Install
$ npm install vue-svg-inline-loader --save-dev$ yarn add vue-svg-inline-loader --devUsage
With webpack - webpack.config.js (recommended):
// webpack
module.exports = {
module: {
rules: [
{
test: /\.vue$/,
use: [
{
loader: "vue-loader",
options: { /* ... */ }
},
{
loader: "vue-svg-inline-loader",
options: { /* ... */ }
}
]
}
]
}
};With vue-cli - vue.config.js:
With gridsome - gridsome.config.js:
With quasar - quasar.conf.js:
// vue-cli, gridsome, quasar
module.exports = {
chainWebpack: config => {
config.module
.rule("vue")
.use("vue-svg-inline-loader")
.loader("vue-svg-inline-loader")
.options({ /* ... */ });
}
};With nuxt - nuxt.config.js:
With quasar - quasar.conf.js:
// nuxt, quasar
module.exports = {
build: {
// use extend() method for nuxt
// use extendWebpack() method for quasar
extendWebpack(config, { isServer, isClient }) {
config.module.rules.push({
test: /\.vue$/,
loader: "vue-svg-inline-loader",
options: { /* ... */ }
})
}
}
};With laravel-mix - webpack.mix.js:
// laravel-mix
const mix = require("laravel-mix");
mix.override(config => {
config.module.rules.push({
test: /\.vue$/,
use: [{
loader: "vue-svg-inline-loader",
options: { /* ... */ }
}]
})
});Basic inline SVG usage with svg-inline keyword directive:
<img svg-inline class="icon" src="./images/example.svg" alt="example" />Which replaces into:
<svg svg-inline class="icon" focusable="false" role="presentation" xmlns="http://www.w3.org/2000/svg" viewBox="...">
<path d="..."></path>
</svg>Basic inline SVG sprite usage with svg-sprite keyword directive:
<img svg-inline svg-sprite class="icon" src="./images/example.svg" alt="example" />Which replaces into:
<svg svg-inline svg-sprite class="icon" focusable="false" role="presentation" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<use xlink:href="#svg-sprite-md5hash" href="#svg-sprite-md5hash"></use>
</svg>
<!-- ... -->
<!-- will get injected right before root closing tag in Vue component -->
<svg xmlns="http://www.w3.org/2000/svg" style="display: none !important;">
<symbol id="svg-sprite-md5hash" viewBox="...">
<path d="..."></path>
</symbol>
<!-- ... -->
</svg>Notice
Loader won't parse any images with Vue bindings used as src attribute [more info].
Configuration
Default options:
{
inline: {
keyword: "svg-inline",
strict: true
},
sprite: {
keyword: "svg-sprite",
strict: true
},
dataAttributes: [],
removeAttributes: ["alt", "src"],
md5: true,
xhtml: false,
svgo: true
/* value true for svgo option is alias for:
svgo: {
plugins: [
{
removeViewBox: false
}
]
}
*/
}Explanation:
inline.keyword:
Defines keyword, which marks images you want to replace with inline SVG. Keyword has to be wrapped with whitespace characters (e.g. space). In case of some conflicts, you can also use data version of your keyword (e.g.data-keyword).inline.strict:
In strict mode loader replaces only images with defined keyword. If strict mode is disabled, loader replaces all images.sprite.keyword:
Defines keyword, which marks images you want to replace with inline SVG using inline sprites. Keyword has to be wrapped with whitespace characters (e.g. space). In case of some conflicts, you can also use data version of your keyword (e.g.data-keyword).sprite.strict:
In strict mode loader replaces only images with defined keyword. If strict mode is disabled, loader replaces all images.dataAttributes:
Array of attributes which will be renamed to data-attributes.removeAttributes:
Array of attributes which will be removed.md5:
Use md5-encoded resource path as ID for inline SVG sprites instead of plaintext. Set it tofalseonly for development purposes.xhtml:
In XHTML mode attribute minimization is forbidden. Empty attributes are filled with their names to be XHTML-compliant (e.g.disabled="disabled").svgo:
Pass SVGO configuration object (documentation can be found here) ortruefor default configuration. Passnullorfalseto disable SVG optimization.
Notice
User-defined options are deep-merged with default options. Arrays are not concatenated.