Vuejs 无法加载 svg 图像?

Posted

技术标签:

【中文标题】Vuejs 无法加载 svg 图像?【英文标题】:Vuejs fails to load svg image? 【发布时间】:2016-05-02 22:41:48 【问题描述】:

在我的一个组件中,我正在尝试加载 svg 图像,但 vuejs/webpack 失败。

这是我的代码:

<template>
    <img src="../../assets/public/images/sad.svg" />
</template>

<script>
export default 
</script>

还有错误:

./src/assets/public/images/sad.svg 中的错误 模块解析失败: /home/cabox/workspace/src/assets/public/images/sad.svg 第 1 行: 意外的令牌 | | | @ ./~/vue-html-loader!./~/vue-loader/lib/selector.js?type=template&index=0!./src/components/tooltip.vue 1:205-258 1:592-645

据我了解,Vuejs(或 Webpack)试图解释 .svg 的内容。而这不是我想要的。

这是我的 svg 的 webpack 配置:

 test: "\.svg", loader: "file-loader?mimetype=image/svg+xml" ,

感谢您的帮助。

【问题讨论】:

可以在浏览器中打开文件吗?我会说这是一个 Webpack 问题,而不是 VueJS。 是的,可以加载文件。而且它也是正确的路径,因为错误消息包含文件的开头。 您可以尝试使用svg-loader 而不是file-loader 我满怀希望地尝试了 svg-loader。编译工作,但是在加载页面时,我有这个新错误:Unexpected token &lt; You may need an appropriate loader to handle this file type. 在我看来,svg-loader适用于webpack,但是当vuejs尝试编译src="..."时,它没有考虑svg-loader的规则,然后就失败了。但我的知识只到这里。 【参考方案1】:

这个对我有用:

test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=image/svg+xml'

它是一个正则表达式,可以按照您查找的方式将任何具有 svg 扩展名的文件作为静态资源处理。

我将它与其他字体加载器一起用于引导程序或其他字形字体:

test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=application/font-woff',
test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=application/octet-stream',
test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, loader: 'file',
test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, loader: 'url?limit=10000&mimetype=image/svg+xml'

使用该正则表达式,您可能可以将加载器更改为文件并像您使用的那样内联它。

【讨论】:

对我有用的太棒了。现在我必须明白为什么它将我的文件放在 dist/dist/ 而不是 dist/ ...

以上是关于Vuejs 无法加载 svg 图像?的主要内容,如果未能解决你的问题,请参考以下文章

自定义 SVG 未加载到我的图像标签中

SVG 图像未在 Chrome 上加载(有时)

Jest 无法加载 svg 文件

VueJS - 重新加载页面后无法将值从 mapState 分配给数据属性

VueJS根据for循环中的变量加载SVG文件,使用v-html给出[object Module]

在加载数据之前触发mounted方法 - VueJS