Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
882 views
in Technique[技术] by (71.8m points)

javascript - Vue.js dynamic image src with webpack require() not working

I'm trying to bind image src dynamically to a URL of the form ../assets/project_screens/image_name.jpg.

My directory structure looks like:

- src
 -- assets
   ---- project_screens
 -- profile
   ---- ProjectList.vue 
 -- store
   ---- profile.js

I know that I need to use webpack's require("path/to/image") to help webpack build those images, but the path doesn't resolve.

// store/profile.js
projects = [
  {
    ....
  },
  {
    ....
    img_url: "../assets/project_screens/im1.jpg"
    ....
  }
  ....
]
// profile/ProjectList.vue
<md-card
   class="md-layout-item project-card"
   v-for="(project, idx) in projects"
   :key="idx"
 >
    <md-card-media>
        <img :src="require(project.img_url)" alt="People" />
    </md-card-media>
</md-card>

If I used a URL string instead of dynamically passing the URL string it works. Looked around stack overflow and none of the solutions helped. Am I missing something else ?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

I finally figured it out!! Webpack cannot import the file if its name is completely given as a variable like:

require(imageUrl) // doesn't work

This is because it doesn't know the path at compile time if the path is stored in a variable.

But Webpack can detect files to bundle when it is given a string interpolation in require() like:

require(`../assets/profile_screens/${filename}`) // Works

This works because Webpack knows the path "../assets/profile_screens" at compile time so it can include all the files inside the folder.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...