Я использую Vue-cli 3 с Webpack, и моя структура папок выглядит следующим образом:
/public
/src
/assets
p1.jpg
p2.jpg
App.vue
main.js
Я читал в нескольких местах, что для того, чтобы Webpack знал, где находятся ваши / активы, вы должны использовать require (), если вы находитесь на земле Javascript.
Я определил, что этот код работает:
<template>
<div>
<ul>
<li v-for="photo in photos" :key="photo.id">
<img :src="photo.imageUrls.default" />
</li>
</ul>
</div>
</template>
<script>
/* For webpack to resolve URLs in javascript during the build, you need the require() function */
export default {
data() {
return {
photos: [
{
id: 1,
caption: 'P1',
series: '',
notes: '',
imageUrls: {
default: require('./assets/p1.jpg')
}
},
{
id: 2,
caption: 'P2',
series: '',
notes: '',
imageUrls: {
default: require('./assets/p2.jpg')
}
}
]
}
}
}
</script>
Но это не работает. Я вижу ошибку в консоли:
«Ошибка: не удается найти модуль» ./assets/p1.jpg'"
<template>
<div>
<ul>
<li v-for="photo in photos" :key="photo.id">
<img :src="imagePath(photo)" />
</li>
</ul>
</div>
</template>
<script>
/* For webpack to resolve URLs in javascript during the build, you need the require() function */
export default {
data() {
return {
photos: [
{
id: 1,
caption: 'P1',
series: '',
notes: '',
imageUrls: {
default: './assets/p1.jpg'
}
},
{
id: 2,
caption: 'P2',
series: '',
notes: '',
imageUrls: {
default: './assets/p2.jpg'
}
}
]
}
},
methods: {
imagePath(photo) {
return require(photo.imageUrls.default);
}
}
}
</script>
Есть ли кто-нибудь, кто может помочь объяснить, что не так во втором примере? Я не хочу помещать в данные вызовы require (), так как эти данные могут поступать с сервера, и мне кажется странным помещать в них вызов require (). Спасибо.
РЕДАКТИРОВАТЬ: согласно совету Эдгара ниже, поскольку мои изображения являются частью сервера, а не приложения, я могу просто поместить их в папку в папке / public и вообще не работать с require ().