【发布时间】:2018-11-22 21:07:38
【问题描述】:
我使用@vue/cli 版本 3.0.0-beta.16 创建了一个 Vuejs 项目,在我的 Home.vue 单文件组件中,我想导入并在模板中添加内联 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 默认使用并像这样添加我自己的加载器,它工作正常:
// 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" /> 使用文件加载器,对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']
})
【问题讨论】:
标签: javascript svg webpack vue.js