我当前的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 / ...
所以经过一番反复试验后,我找到了答案: