【问题标题】:Vue cannot find module image locationVue 找不到模块图像位置
【发布时间】:2020-11-24 01:50:19
【问题描述】:

我的项目有问题,找不到我的 png 图像的路径。我知道路径是正确的,因为如果我使用基本的硬编码 src="../assets/die1.png",它可以正常工作。问题是我需要根据其他数据更改它们。

我不断收到错误:找不到模块'../assets/die1.png'

组件:

<template>
  <div class="DiceComponent col-3 bg-primary">
    <img v-if="die.output != ''" :src="require(die.output)" alt="error loading image" />
  </div>
</template> 

注意:die.output == "../assets/die1.png" 这已在 Vue 开发工具中得到确认。

EDIT: This is currently what I get when it tries to load.

【问题讨论】:

  • require 是什么?
  • 是 die.output === "../assets/die1.png"' ?
  • 我不得不在其他项目的图像上使用 require。不完全确定为什么,但我读到它与 Vue 如何编译成 vanilla JS 有关
  • 是的,托尼,它们完全一样
  • 请发布更多代码,以便您获得帮助。文件结构会很好。此外,带有die 对象的data 属性(我假设die 是其中之一)。如果die 对象不在data 属性中,请分享您从哪里获得die 对象。

标签: vue.js module src


【解决方案1】:

为了便于阅读,您可以将 输出 变量更改为:

die.output == require('../assets/die1.png') 

die.output == require('@/assets/die1.png') 

然后

<template>
  <div ...>
    <img ... :src="die.output" ... />
  </div>
</template> 

【讨论】:

    【解决方案2】:

    我在您的商店功能中遇到了一些我现在可以解决的错误,因此我专注于图像问题。当您使用静态文件时,我已将它们移至公用文件夹并制作了一个简单的 rollDice 函数:

    rollDice() {
       let rng = Math.floor(Math.random() * 6);
       this.diceTemp = `./die${rng+1}.png`
    },
    

    然后:

    <Die :die="diceTemp" />
    

    组件内部:

    <img :src="die" />
    

    这很好用!需要考虑的事项:

    【讨论】:

    • 我也试过了,但我得到了同样的错误。完整的错误代码是:错误:在 webpackEmptyContext 处找不到模块“../assets/die2.png”(eval at ./src/components sync recursive (app.js:1148), :2:10) at Proxy.render (eval at ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"200ee25a-vue-loader-template"} !./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./ src/components/DiceComponent.vue?
    • vue&type=template&id=1928e616& (app.js:998), :11:79) 在 VueComponent.Vue._render (vue.runtime.esm.js?2b0e:4540) 在 VueComponent .updateComponent (vue.runtime.esm.js?2b0e:2784) 在 Watcher.get (vue.runtime.esm.js?2b0e:3138) 在 Watcher.run (vue.runtime.esm.js?2b0e:3215) 在flushSchedulerQueue (vue.runtime.esm.js?2b0e:2977) at Array.eval (vue.runtime.esm.js?2b0e:1833) at MessagePort.flushCallbacks (vue.runtime.esm.js?2b0e:1754)跨度>
    • 更新了组件模板``` ```
    • 更新了一张图片,我觉得一切正常
    • 此处突出显示并直接显示在滚动按钮下方的行是硬编码的模具图像。如果您选择多个骰子然后掷骰子,它会起作用吗?如果您想要 Vue 开发工具,您可以看到每个组件在每次滚动时都正确更新 die.output,但它不显示图像。我做了更多的研究,发现 Vue 没有设置为获取 .png 文件,你需要 webpacks。不完全确定我是否设置了这些。我知道我有一些,不确定我是否有正确的,或者它们是否配置正确。
    【解决方案3】:

    替换你现在拥有的

    <template>
      <div ...>
        <img ... :src="require(`${die.output}`)" ... />
      </div>
    </template> 

    【讨论】:

    • 它仍然会导致错误。删除 require 部分会停止错误,但会触发 alt 消息。
    猜你喜欢
    • 2020-03-23
    • 1970-01-01
    • 2020-09-27
    • 2020-01-29
    • 1970-01-01
    • 2021-11-13
    • 1970-01-01
    • 2022-08-13
    • 2022-01-16
    相关资源
    最近更新 更多