Как мне заставить asset() корректно работать в Laravel 8.x?

#laravel

#laravel

Вопрос:

Я использую Laravel 8.x в Windows 10 вместе с Vue 2.6.12. Я работаю над видео по объединению Vue с Laravel. Видео предназначено для более старой версии Laravel, вероятно, 5.5, и, вероятно, немного более старой Vue, так что это вполне может быть причиной моей проблемы. Вот ссылка на видео. Я примерно на отметке в 8:00 минут.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь выполнить свой код, Laravel не видит app.js файл независимо от того, сколько я экспериментирую с параметром src тега script. (У меня хорошее воображение, и я МНОГО экспериментировал.) Руководство Laravel здесь не очень помогло, за исключением того, что я видел, что в нем упоминается параметр ASSET_URL для файла .env, поэтому я попытался указать там начальную часть пути, но ничего из того, что я пробовал, не работает; Я неизбежно получаю ошибку 404. (Как бы то ни было, я попытался удалить asset() и просто закодировать путь традиционным способом, но это тоже не работает.)

Мой app.js файл находится по адресу /resources/assets/js/app.js . Файл, содержащий тег script, layout.blade.php , находится в /resources/views/layout.blade.php . Код в теге script гласит:

 <script src=" asset('js/app.js')"></script> 
 

точно так же, как видео. В файле .env ASSET_URL=’/resources/assets/’ . Что мне нужно изменить, чтобы это работало? Я не могу придумать ничего другого, чтобы попробовать!

Комментарии:

1. примерно в 4:30-5:00 в видео описывается, как установить и собрать ваш JS. это работает правильно? Также он использует {{ asset'/js/app.js') }} , что вы пропустили {{ }}

2. @apokryfos — Да, я выполнил команду npm install и npm run watch, но я запустил их снова, просто для уверенности. Я также вернул {{ }} обратно в параметр src — они были там для многих различных вариантов, которые я пробовал ранее, — но Laravel по-прежнему не видит файл.

3. если npm run watch он был успешно завершен, он не вернется, но продолжит работать в фоновом режиме и создавать ваш JS каждый раз, когда вы вносите изменения. Возможность повторного запуска указывает на то, что он мог работать неправильно

Ответ №1:

Вам нужно использовать скомпилированную версию файла /resources/assets/js/app.js .

npm run dev or npm run watch для компиляции активов, которые создадут соответствующие app.js файл в /public/js/app.js папке

Используйте это в своем теге script

 <script src="{{ asset('js/app.js') }}"></script> 
 

Комментарии:

1. Я восстановил {{ }}, но я все еще получаю ошибку 404. (Я использовал фигурные скобки в большинстве своих попыток заставить это работать, но затем я решил попробовать это без фигурных скобок или функции asset (), а затем я забыл вернуть их обратно при составлении моего вопроса.

2. У вас есть /public/js/app.js проверка файлов? Опубликуйте код webpack.mix.js

Ответ №2:

вы пишете код, /resources/assets/js/app.js а затем запускаете npm run dev для его создания файл, который будет сгенерирован в public/js/app.js этом активе, который вам нужно включить в свой файл блейда, например

в /resources/views/layout.blade.php

 <script src="{{ asset('js/app.js') }}"></script> // make sure use {{ }} as asset() is helper function it need to run 
 

здесь asset() укажите на public dir, чтобы asset('js/app.js' это означало dir public/js/app.js

ссылка на ссылку https://laravel.com/docs/8.x/helpers#method-asset

Комментарии:

1. Да, я все это сделал — я восстановил {{ }} сейчас, но раньше широко использовал их во время своих экспериментов — но я все равно получаю 404. Я не знаю, что еще попробовать. Если я нигде не указываю ASSET_URL, каково его значение по умолчанию?

Ответ №3:

Хорошо, я исправил ошибку 404, но теперь у меня новая проблема. Я задам новый вопрос об этом. Во-первых, позвольте мне объяснить, как я исправил ошибку 404 для app.js .

  1. Я удалил ASSET_URL из .env, поскольку парень в видео этого не сделал.
  2. Я более точно имитировал то, что делало видео. Я помещал тег script в layout.blade.php файл, но я отказался от этого и создал welcome.blade.php это было идентично тому, что было на видео.

Я не совсем уверен, почему мой первоначальный подход не сработал, но Laravel успешно извлекает app.js файл сейчас же.

Если у кого-нибудь есть какие-либо идеи, зачем помещать тег script в файл макета, который затем вставляется в welcome.blade.php если это не сработает, мне было бы интересно услышать от вас.

Спасибо всем, кто пытался помочь!