Vue.js 动态图像路径未加载

Posted

技术标签:

【中文标题】Vue.js 动态图像路径未加载【英文标题】:Vue.js dynamic image paths not loading 【发布时间】:2018-08-23 17:14:29 【问题描述】:

我正在尝试在单个文件组件中动态加载图像,但我收到一个错误,即找不到该模块。我想我正在尝试做与this SO post 相同的事情,但我不确定我做错了什么。我使用webpack template 来设置我的项目。

这是我模板中的相关标记:

<router-link :to=" name: 'JobsDetail', params:  slug: job.slug  ">
    <span class="icon">
        <img :src="getIconPath(job.slug)"/>
    </span>
     job.title 
</router-link>

以及我试图从中获取图像的功能:

methods: 
    getIconPath (iconName) 
        const icons = require.context('../assets/', false, /\.png$/)
        return iconName ? icons(`./$iconName.png`) : ''
    

我在/src/assets/ 目录中有图像。我在浏览器控制台中遇到的错误是:

[Vue warn]: Error in render: "Error: Cannot find module './some-icon.png'."

我不确定这是 webpack 配置问题,还是 getIconPath 函数的问题。任何帮助表示赞赏,谢谢!

【问题讨论】:

你有那个 JS 代码的文件(路径)在哪里? @acdcjunior 这都在位于/src/components/JobList.vue的单个文件组件中 【参考方案1】:

在我看来,当 webpack 在 dev 或 prod 中构建时,图像等静态资产应该进入 /static。

查看配置文件:vuejs-templates/webpack/blob/develop/template/config/index.js,您有以下配置(前提是您没有更改任何内容):

// Paths
assetsSubDirectory: 'static',
assetsPublicPath: '/',

所以 src 应该是这样的:

<img src="/static/whatEverMyIconIs.png"/>

编辑:

进一步查看配置,在 vuejs-templates/webpack/blob/develop/template/build/webpack.base.conf.js 中,有一个 url-loader 插件应该将图像放入 /static/img:

 
    test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
    loader: 'url-loader',
    options: 
      limit: 10000,
      name: utils.assetsPath('img/[name].[hash:7].[ext]')
    
  ,

这可以使您的 src url(取决于图标的加载方式):

<img src="/static/img/whatEverMyIconIs.png"/>

【讨论】:

【参考方案2】:

考虑到您的 javascript 代码位于 /src/components/JobList.vue,而您的图像位于 /src/assets/,请按如下方式使用:

methods: 
    getIconPath (iconName) 
        return iconName ? require(`../assets/$iconName`) : ''
    

【讨论】:

你可以试试硬编码吗?您确定存在的某些文件,例如/src/assets/my-icon.png,您进行硬编码,例如:&lt;img :src="getIconPath('my-icon.png')"/&gt; 如果它不起作用,你能粘贴整个堆栈跟踪(不仅仅是第一行)吗?它包含重要信息。 根据您的建议尝试使用硬编码的图标名称。我不确定它的确切原因,但我将 JSON 图标路径设置为“icon-name.png”,而不是在 require 函数调用中添加 .png。

以上是关于Vue.js 动态图像路径未加载的主要内容,如果未能解决你的问题,请参考以下文章

在 Vue.js 中生成动态 img 路径

axios请求后的VUE JS动态背景图片

列表未在 vue.js 中动态显示

图像未在 XAMPP 中加载

在 vue.js 中动态添加/删除图像

在 ReactJs 中基于动态路径加载图像