Vue / Laravel: использование параметров запроса, чтобы избежать кеширования - PullRequest
2 голосов
/ 08 мая 2019

У меня проблема с кэшированием Vue js в комплекте, поэтому я собираюсь начать управление версиями. Тем не менее, я не понимаю, какой правильный способ сделать это. Я знаю, что должен ссылаться на JS-файл в Blade-файле, добавив строку запроса, чтобы заставить сервер думать, что это новый файл, но нужно ли мне что-то делать с самим файлом app.js?

<script type="text/javascript" src="{{ cdn('/js/app.js') }}"></script>

РЕДАКТИРОВАТЬ:

Встроенное управление версиями Laravel Mix с использованием mix() не работает, потому что я обращаюсь к файлу JS через пользовательский помощник CDN: <script type="text/javascript" src="/js/app.js?v=123"></script>

function cdn($file)
{
    return env('CDN_URI', '').'/'.ltrim($file, '/');
}

Ответы [ 2 ]

2 голосов
/ 08 мая 2019

Если вы используете Laravel с Vue.js, я предполагаю, что вы используете Laravel Mix , а если нет, то, вероятно, вам следует. И Laravel Mix уже предлагает очистку кеша через хэши строк запроса. Поэтому, если бы вы использовали Laravel Mix, это было бы так же просто, как иметь это в вашем файле webpack.mix.js:

mix.js('resources/js/app.js', 'public/js').version();

И затем с помощью вспомогательной функции mix в вашем Blade-файле:

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

Это выведет что-то вроде этого:

<script src="/js/app.js?id=a7af6e15c9595bb9d346"></script>

с автоматическим изменением хэша при каждом изменении ваших файлов JS.


Так что да, ваш подход добавления значения строки запроса, которое меняется в зависимости от версии, хорош. Но если у вас нет веских причин против этого, я предлагаю использовать Laravel Mix , так как управление версиями - это лишь одно из многих преимуществ, которые вы получаете от него.


EDIT

Чтобы обойти вашу конкретную проблему, вы можете изменить свою вспомогательную функцию следующим образом:

function cdn($file, $useMix = false)
{
    return env('CDN_URI') . ($useMix ? mix($file) : $file);
}

Это будет работать точно так же, только если вы добавите ваш CDN к относительному пути, вычисленному помощником микширования. И если вы хотите использовать для обоих случаев:

// With Mix
cdn('js/app.js');

// Without Mix
cdn('js/app.js', false);

Я немного сократил вашу функцию, потому что:

  • env('CDN_URI') имеет тот же эффект, что и env('CDN_URI', '')
  • и '/' . ltrim($file, '/') - это то же самое, что и $file при использовании mix().
0 голосов
/ 08 мая 2019

Вы должны посмотреть на помощников микс;В Laravel есть все, что вам нужно, чтобы убедиться, что ваши шаблоны блейдов всегда содержат версионную ссылку, когда вы используете mix ...

Проверьте здесь: https://laravel.com/docs/5.8/mix#versioning-and-cache-busting

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...