Динамический импорт Vue webpack с требованием не работает

Я создаю приложение, которое воспроизводит разные звуки, я сделал компонент NoiseMix, который будет иметь много компонентов Noise. Каждый шум должен иметь свой собственный параметр 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>

Попробуйте return require('@/assets/sounds/' + this.filename), с отредактированным именем файла вместо полного пути, конечно

Dan 09.12.2020 23:26

Что, если вы используете :src = "@{url}" вместо вычисляемого свойства.

Bulent 09.12.2020 23:36

В качестве теста, пожалуйста, попробуйте return require(`@/assets/sounds/${this.url.split("/").pop()}`). Динамический импорт в Webpack работает лучше всего, когда он знает больше о необходимых путях. Редактировать: только что понял, что @Dan тоже просит вас сделать это

Phil 09.12.2020 23:43
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
270
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Webpack нуждается в небольшой помощи для получения правильного пути с динамическим импортом (я подозреваю, что проблема связана с использованием псевдонима как такового, но я недостаточно проверял его). Попробуйте:

return require('@/assets/sounds/' + this.filename)

Он выглядит практически так же, как и у вас, но дает ожидаемый результат.

Другие вопросы по теме