Если вы используете 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()
.