#javascript #vue.js #webpack #vue-component #vue-cli
#javascript #vue.js #веб-пакет #vue-компонент #vue-cli
Вопрос:
Я создаю приложение, которое воспроизводит разные звуки, я создал компонент NoiseMix, который будет содержать много шумовых компонентов. Каждый шум должен иметь свой собственный параметр url для загрузки фактического mp3, но у меня возникают проблемы со статическими файлами.
в NoiseMix у меня есть эти данные:
data: () => {
return {
sounds: [
{ id: 1,
url: "/assets/sounds/rain.mp3",
icon: "fas fa-cloud-rain",
name: "Rain",
volume: 50
}, {
id: 2,
url: "/assets/sounds/rain.mp3",
icon: "fas fa-wind",
name: "Wind",
volume: 50
}, {
id: 3,
url: "/assets/sounds/rain.mp3",
icon: "fas fa-water",
name: "Waves",
volume: 75
}
]
}
},
И мой компонент шума выглядит так:
<template>
<div class="single-noise">
<div class="single-noise__icon">
<i :class="icon"></i><br />
</div>
<div class="single-noise__content">
ID: {{id}}<br />
Name: {{name}}<br />
Sound URL: {{url}}<br />
Volume: {{volume}}<br />
<input type="range" min="0" max="100" name="" v-model="volume"><br />
audio:
<audio controls>
<source :src="trackUrl" type="audio/mpeg">
</audio>
</div>
</div>
</template>
<script>
export default {
name: "Noise",
props: {
url: String,
icon: String,
name: String,
id: Number,
volume: Number,
},
computed: {
trackUrl () {
// THIS LINE IS THE PROBLEM
// If I use require('@' this.url); the app doesn't load at all and there's no error
return require('@' '/assets/sounds/rain.mp3');
}
}
}
</script>
Комментарии:
1. Попробуйте
return require('@/assets/sounds/' this.filename)
, конечно, с отредактированным именем файла вместо полного пути2. Что, если вы используете:src=»
@{url}
» вместо вычисляемого свойства.3. В качестве теста, пожалуйста, попробуйте
return require(`@/assets/sounds/${this.url.split("/").pop()}`)
. Динамический импорт в Webpack работает лучше всего, когда он знает больше о требуемых путях. Редактировать: только что понял, что это в значительной степени то, что @Dan просит вас сделать тоже
Ответ №1:
Webpack нуждается в небольшой помощи в получении правильного пути при динамическом импорте (я подозреваю, что проблема связана с использованием псевдонима самого по себе, но я недостаточно его протестировал.) Попробуйте:
return require('@/assets/sounds/' this.filename)
Он выглядит практически так же, как и у вас, но дает ожидаемый результат.