Laravel Mix / Webpack目录前缀

问题描述 投票:0回答:1

我当前的webpack配置为:

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时,它会在公共目录(例如11.js或19.js)中创建许多javascript文件。即使使用?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或文件名,因为这样做时,例如,将名称基于chunkhash,然后每次重新编译时,都会保留具有旧chunkhash名称的旧js文件。

我想做的是在调用11.js的前面放置一个目录前缀。我似乎找不到什么能说明将这些文件直接放入公共目录的方法吗?理想情况下,我需要某种配置,例如:

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

然后重写:

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

有什么想法吗?

我当前的webpack配置为:mix.webpackConfig({输出:{chunkFilename:“ [name] .js?ver = [chunkhash:8]”,filename:“ [name] .js”,}}); mix.js('resources / js / app.js','public / ...

webpack laravel-mix
1个回答
0
投票

所以经过一番反复试验后,我找到了答案:

© www.soinside.com 2019 - 2024. All rights reserved.