/
module.js
41 lines (32 loc) · 1.16 KB
/
module.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
const logger = require('consola').withScope('nuxt-svg-loader')
export default function nuxtSvgLoader() {
const { svgLoader: options } = this.options
if (options && options.svgo && !options.svgoConfig) {
options.svgoConfig = options.svgo
}
this.extendBuild(setupVueSvgLoader(options))
}
const svgRulePredicate = rule => rule.test && rule.test.test('.svg')
const setupVueSvgLoader = options => (config) => {
// https://github.com/egoist/svg-to-vue-component#nuxtjs-2
const imageLoaderRule = config.module.rules.find(svgRulePredicate)
if (!imageLoaderRule) {
logger.error('Could not modify image loader rule!')
return
}
// Don't process .svg files in default image rule
// from https://github.com/nuxt/nuxt.js/blob/76b10d2d3f4e5352f1c9d14c52008f234e66d7d5/lib/builder/webpack/base.js#L203
imageLoaderRule.test = new RegExp(imageLoaderRule.test.toString().replace('svg', '').replace('||', '|'))
// Add a new rule for .svg file
config.module.rules.push({
test: /\.svg$/,
use: [
'vue-loader',
{
loader: 'svg-to-vue-component/loader',
options
}
]
})
}
module.exports.meta = require('../package.json')