我使用@vue/cli 3.0.0-beta.16创建了一个Vuejs项目,在Home.vue单文件组件中,我想在模板中导入并添加内联SVG,但我遇到了麻烦。
问题是vue cli已经将 .svg 文件扩展名用于文件加载器,例如:
并且在我的模板中:
但问题是,它也会用内联svg代码替换
编辑 我认为问题在于我错误地添加了两个加载器。这是我在文件中添加它们的方式:
问题是vue cli已经将 .svg 文件扩展名用于文件加载器,例如:
webpackConfig.module
.rule('svg')
.test(/\.(svg)(\?.*)?$/)
.use('file-loader')
.loader('file-loader')
.options({
name: getAssetPath(options, `img/[name].[hash:8].[ext]`)
})
我已经尝试使用html-loader插件来将svg包含在模板中,如果我清除vue.config.js中默认的svg use并添加自己的加载器,它就可以正常工作:
// vue.config.js
chainWebpack: config => {
const svgRule = config.module.rule('svg')
// clear all existing loaders.
// if you don't do this, the loader below will be appended to
// existing loaders of the rule.
svgRule.uses.clear()
// add replacement loader(s)
svgRule
.test(/\.(svg)$/)
.use('html-loader')
.loader('html-loader')
.options({
})
}
并且在我的模板中:
// Home.vue
<div v-html="require('./../assets/inline.svg')"></div>
但问题是,它也会用内联svg代码替换
<img />
标签中的svg src。我想要的是对于<img src="something.svg" />
使用file-loader,并对于require('./inline.svg')
使用html-loader。我该如何在webpack中为同一规则使用多个加载器?或者这是否是正确的方法?任何帮助将不胜感激。编辑 我认为问题在于我错误地添加了两个加载器。这是我在文件中添加它们的方式:
// vue.config.js
svgRule
.test(/\.(svg)$/)
.use('file-loader')
.loader('file-loader')
.options({
name: getAssetPath(options, `img/[name].[ext]`)
})
svgRule
.test(/\.(svg)$/)
.use('html-loader')
.loader('html-loader')
.options({
attrs: ['div:v-html']
})