svg-sprite-vue-generator
Vue component runtime generator for svg-sprite-loader.
Install
npm install svg-sprite-vue-generator -D
Usage
Inline mode
All svg icon will be inline to part of the component.
Inline mode is default mode from svg-sprite-loader
. It called spriteModule
.
import FacebookSprite from './assets/facebook.sprite.svg'
import TwitterSprite from './assets/twitter.sprite.svg'
import wikipedia from './assets/wikipedia.svg'
console.log(FacebookSprite)
console.log(TwitterSprite)
console.log(wikipedia)
Config
May be need to install related loaders, such as:
module.exports = {
chainWebpack: config => {
config.module.rule('svg')
.exclude.add(/\.sprite\.(svg)(\?.*)?$/).end()
config.module.rule('svg-sprite')
.test(/\.sprite\.(svg)(\?.*)?$/)
.use('babel-loader').loader('babel-loader').end()
.use('svg-sprite-loader').loader('svg-sprite-loader').tap(() => {
return {
runtimeGenerator: require.resolve('svg-sprite-vue-generator'),
}
}).end()
.use('svgo-loader').loader('svgo-loader')
}
}
All svg file will be group to an independent svg file.
import FacebookSprite from './assets/facebook.sprite.svg'
import TwitterSprite from './assets/twitter.sprite.svg'
import TwitterSpriteURL from './assets/twitter.sprite.svg?URL'
import wikipedia from './assets/wikipedia.svg'
console.log(FacebookSprite)
console.log(TwitterSprite)
console.log(TwitterSpriteURL)
console.log(wikipedia)
Config
May be need to install related loaders, such as:
const SpriteLoaderPlugin = require('svg-sprite-loader/plugin')
module.exports = {
assetsDir: 'static',
configureWebpack: {
plugins: [
new SpriteLoaderPlugin()
]
},
chainWebpack: config => {
config.module.rule('svg')
.exclude.add(/\.sprite\.(svg)(\?.*)?$/).end()
config.module.rule('svg-sprite')
.test(/\.sprite\.(svg)(\?.*)?$/)
.use('svg-sprite-loader').loader('svg-sprite-loader').tap(() => {
return {
runtimeGenerator: require.resolve('svg-sprite-vue-generator'),
runtimeOptions: {
extractCompTagImg: false,
},
extract: true,
publicPath: '/static/'
}
}).end()
.use('svgo-loader').loader('svgo-loader')
}
}
TypeScript
add module declare for typescript.
declare module "*.sprite.svg" {
import Vue, { VueConstructor } from 'vue'
const content: VueConstructor<Vue>
export default content
}
Runtime Options
Use runtime options to config more
{
extractCompTagImg: false,
attrs: {},
loadingClass: '',
otherClass: '',
}
Note
- Can not use inline and extract mode together
- May be you can use just extract mode for all svg file
Demo
npm run demo:serve