Получить неожиданный токен '<' при загрузке JS-файла в vue.js + laravel

Я пытаюсь изучить laravel 10 с помощью vue inertia, пересобрав свой старый проект, который я написал, используя vue и node.

Я использую библиотеку для записи звука, код такой:

recorder = new WebAudioRecorder(input, {
        encoding: encodingType,
        numChannels: 2,
        onEncoderLoading: async function (recorder, encoding) {},
        onEncoderLoaded: async function (recorder, encoding) {},
});

новый WebAudioRecorder будет загружаться из WebAudioRecorder.min.js. в WebAudioRecorder.min.js он создает нового Worker из файла WebAudioRecorderWav.min.js.

Код работает нормально в моем старом проекте, но когда я использую laravel, я замечаю, что всякий раз, когда я загружаю файл js, я продолжаю перенаправляться обратно в текущий файл и получаю ошибку: 1:1 Uncaught SyntaxError: Неожиданный токен '<' (в 1:1:1).

Заглядываю в сеть и вижу, что после загрузки файла WebAudioRecorder.min.js он всегда перенаправляется обратно на текущий файл. Из-за этого событие onComplete никогда не срабатывает и не возвращает большой двоичный объект, как ожидалось.

Изображение консоли 1

Изображение консоли 2

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

После некоторых дополнительных исследований я нашел проблему и смог ее исправить.

На самом деле есть две проблемы:

Когда WebAudioRecorder.min.js пытается создать новый Worker из WebAudioRecorderWav.min.js, он не загрузил файл правильно, как вы можете видеть на этом снимке экрана сети; вот почему меня перенаправляют обратно на текущую страницу, когда она не может найти WebAudioRecorderWav.min.js.

network screenshort: cannot load js file correctly

Правильный номер порта содержимого URL http://localhost:5173/; но если указать только имя файла в new Worker('WebAudioRecorderWav.min.js'), я получаю:

http://localhost/public/sound/WebAudioRecorderWav.min.js

Затем я пытаюсь получить правильный URL-адрес, выполнив следующие действия:

    const url = import.meta.url;
    const parts = url.split('/');
    if (parts.length == 5) {
        parts.pop();
        parts.pop();
    }
    else parts.pop();

Здесь я получаю правильный URL-адрес. Однако это привело к другой проблеме: веб-работник не может загрузить из другого локального файла JavaScript по соображениям безопасности, поэтому я получаю следующую ошибку:

console screenshort: DOMException: Failed to construct 'Worker'

Нам нужен URL для WebAudioRecorderWav.min.js. Я нашел обходной путь (Chrome не может загрузить веб-работника):

  • Шаг 1: Нам просто нужно скопировать весь код из WebAudioRecorderWav.min.js в функцию в WebAudioRecorder.min.js, хотя это противоречит цели записи кода в другой файл JavaScript.

  • Шаг 2. Добавьте условие (window!=self) для запуска функции. Я не уверен, как оно работает, но у меня оно сработало.

  • Шаг 3. Мы можем загрузить функцию в наш новый рабочий объект, преобразовав ее в большой объект и затем создав для него URL-адрес.

    function worker_function() {
        // all WebAudioRecorderWav.min.js code here
    }
    
    if (window!=self)
        worker_function();
        new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'})));
    

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