Laravel Префикс каталога Mix / Webpack - PullRequest
0 голосов
/ 06 февраля 2020

Моя текущая конфигурация веб-пакета:

mix.webpackConfig({
    output: {
        chunkFilename: "[name].js?ver=[chunkhash:8]",
        filename: "[name].js",
    }
});

mix.js('resources/js/app.js', 'public/js')
   .sass('resources/sass/app.scss', 'public/css')
   .sass('resources/sass/web.scss', 'public/css/web.css')
   .options({
      processCssUrls: false,
       uglify: {
           uglifyOptions: {
               warnings: false,
               comments: false,
               beautify: false,
               sourceMap: true,
               compress: {
                   warnings: false,
                   conditionals: true,
                   unused: true,
                   comparisons: true,
                   sequences: true,
                   dead_code: true,
                   evaluate: true,
                   if_return: true,
                   join_vars: true,
                   drop_debugger: true
               },
               output: {
                   comments: false
               },
           }
       }
    }).version().sourceMaps();

mix.extract(['vue', 'jquery','vue-awesome-swiper', 'bootstrap', 'lodash', 'vue-pluralize', 'vue-read-more', 'vue-sticky-directive', 'vue-waypoint']);

Когда я запускаю npm watch или npm production, он создает десятки javascript файлов в каталоге publi c, например 11. js или 19. js. Даже с аргументом? Ver =, у нас все еще есть проблемы с некоторыми браузерами, которые кэшируют javascript и не обновляют при внесении изменений.

В прошлом у нас была эта проблема с файлами поставщика и манифеста, поэтому одна мы исправили это в Laraval:

<script src="/cache-bust-{{ \Cache::remember('cache-bust_' . md5(mix('/js/manifest.js')), 60, function () { return md5(mix('/js/manifest.js')); }) }}{{ mix('/js/manifest.js') }}"></script>
<script src="/cache-bust-{{ \Cache::remember('cache-bust_' . md5(mix('/js/vendor.js')), 60, function () { return md5(mix('/js/vendor.js')); }) }}{{ mix('/js/vendor.js') }}"></script>
<script src="/cache-bust-{{ \Cache::remember('cache-bust_' . md5(mix('/js/app.js')), 60, function () { return md5(mix('/js/app.js')); }) }}{{ mix('/js/app.js') }}"></script>

И затем добавили это переписывание в apache conf:

RewriteRule ^cache-bust-(.*)/js/(.*)$ /js/$2 [L]

Таким образом, может возникнуть запрос на поиск:

<script src="/cache-bust-e8504524e2eb05e2daa34d6cbb91dd4c/js/manifest.js?id=be4f23f7f36b3345edf2"></script>

И Apache правильно его маршрутизируют и на 100% лучше справляются с очисткой кэша.

Мы хотели бы сделать то же самое с этими маленькими js файлами, такими как 11. js. Имейте в виду, что я не хочу на самом деле изменять chunkFilename или имя файла, потому что когда вы делаете это и основываете имя, например, на chunkha sh, то каждый раз, когда вы перекомпилируете, старые js файлы со старой chunkha sh имя осталось.

Я хочу поставить префикс каталога перед тем, где вызывается 11. js. Я не могу найти то, что говорит mix, чтобы поместить эти файлы непосредственно в каталог publi c? В идеале я хотел бы, чтобы какая-то конфигурация говорила что-то вроде:

urlPath: "cache-js-bust-[chunkhash:8]/[chunkFilename]"

Затем переписать:

 RewriteRule ^cache-js-bust-(.*)/(.*)$ /$2 [L]

Есть мысли?

1 Ответ

0 голосов
/ 06 февраля 2020

Итак, после некоторых проб и ошибок я нашел ответ:

mix.webpackConfig({
output: {
    publicPath: "/cache-js-bust-[hash]/",
    chunkFilename: "[name].js?ver=[chunkhash:8]",
    filename: "[name].js",
}

});

...