Я разрабатываю систему, и каждый раз, когда я что-то обновляю в общей папке, каждый компьютер всегда должен очищать свой кеш, чтобы это вступило в силу.
Я кодировал только файлы js и css в общей папке. Когда я отправляю его в свой репозиторий git и загружаю на наш общий хостинг через ssh, после этого я копирую его в папку public_html также через ssh, всем клиентским компьютерам по-прежнему необходимо очищать свои кеши вручную, чтобы новые общедоступные файлы вступили в силу. . Я немного изучил смесь laravel, однако я все еще не уверен, как на самом деле использовать ее на живом хостинге.
Я не уверен, что очистка кеша является правильным термином в настоящее время, но я хотел, чтобы мои клиентские компьютеры использовали последние активы каждый раз, когда я обновляю нашу систему.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Laravel имеет встроенную систему для компиляции ресурсов, таких как CSS и JavaScript, которая включает систему управления версиями гарантирует, что при отправке новой версии пользователи получат эти обновленные ресурсы.
mix.js('resources/js/app.js', 'public/js')
.version();
@LEADIT Вы можете сделать npm run production локально, а затем поместить файлы public в папку public_html вашего сервера. Однако я вообще не рекомендую запускать Laravel на виртуальном хостинге.
Нужно ли мне также устанавливать npm на мой живой хостинг?
Хостинг VPS в наши дни стоит очень дешево. Начиная с 3,50 долларов США от AWS lightsail.
@ceejayoz Я пробовал, и это работает. Однако, когда я использую функцию из одного внешнего js в другой, она возвращает ошибку "функция не определена"
Вы можете включить версию в свои файлы css и js.
<link rel = "stylesheet" href = "{{asset('css/style.css?v=3.0')}}"> //specific versioning
<link rel = "stylesheet" href = "{{asset('css/style.css?v='.rand(1,99))}}"> //random .. every it treats as a new file
Подход rand не является хорошей идеей, если только вы не используете ограничение много выше 99. Частый посетитель будет регулярно просматривать кешированные материалы (и, возможно, несколько разных кешированных версий за одно посещение), а нечастые посетители будут подвергаться гораздо большему использованию полосы пропускания и низкой производительности. поскольку файл CSS будет перезагружаться при каждом просмотре страницы.
@ceejayoz Могу я спросить, что вы можете предложить по этому поводу? Я тоже готов об этом версионировании и некоторые не рекомендуют его по разным причинам.
@LEADIT Смотрите мой ответ. Управление версиями — это основной способ, которым люди справляются с этим — вы увидите почти каждый крупный сайт (включая прямо здесь, на StackOverflow), использующий какой-то подход к управлению версиями. Я не знаю, кто такие «некоторые», но они дают вам плохую/устаревшую информацию.
@ceejayoz Прошу прощения за некоторые обобщения, но я также видел такой ответ о переполнении стека, и ваш комментарий к его ответу очень похож на этот (их способ использования управления версиями). Вот почему я нахожу лучший способ, который я прочитал в вашем комментарии.
Еще один быстрый и грязный способ очистки кеша — использование метки времени последнего изменения файла в качестве строки версии. Таким образом, если вы обновите файл, временная метка тоже изменится. Для этого в PHP есть метод время файла.
Я постоянно использую это в Wordpress, но в шаблоне блейда Laravel это выглядит примерно так:
<script src = "{{ asset('js/scripts.js') }}?ver = {{ filemtime(public_path('js/scripts.js')) }}"></script>
Я рекомендую использовать встроенный способ Laravel, потому что у него много других преимуществ. Но принцип этого трюка может быть полезен и во многих других ситуациях.
В чем преимущество использования встроенного в Laravel способа?
Кроме того, чтобы избежать утечки времени последней модификации, значение может быть хешировано, например, с помощью md5 или что-то более безопасное, например bcrypt.
В настоящее время я использую виртуальный хостинг. Я все еще не уверен, как я буду это пробовать, но, как я понимаю сейчас, кажется, что npm run production скомпилирует все файлы в общую папку проекта, а не в корневой каталог (public_html)