[使用webpack-s3-plugin
npm软件包,我将laravel-mix编译和版本控制的文件保存到S3中(用于CDN)。
请记住,这一直持续到昨天。
let webpackPlugins = [];
if (mix.inProduction() && process.env.UPLOAD_S3) {
webpackPlugins = [
new s3Plugin({
include: /.*\.(css|js)$/,
s3Options: {
accessKeyId: process.env.AWS_KEY,
secretAccessKey: process.env.AWS_SECRET,
region: process.env.AWS_REGION,
},
s3UploadOptions: {
Bucket: process.env.ASSETS_S3_BUCKET,
CacheControl: 'public, max-age=31536000'
},
basePath: 'assets/' + process.env.APP_ENV,
directory: 'public'
})
]
}
mix.scripts([ // I also tried '.combine'
'resources/js/vendor/vendor/jquery.slimscroll.js',
'resources/js/vendor/custom/theme-app.js',
], 'public/js/scripts.js')
// Other bundling stuff
.js([...].version()
mix.webpackConfig({
plugins: webpackPlugins
});
现在,S3的eTag与mix-manifest.json
哈希不匹配。而且,当我访问该页面时,它会获取1个版本,不是最新上传的,而是1个先前的版本。但是,当我在S3上检查“更新日期”时,它是正确的。不过,它只是后面的一个版本。
我怀疑它是在捆绑完成之前上传到s3;但是我不确定。我在这里想念什么?
如果想详细了解幼虫侧,我使用了this guide。
在深入研究S3插件源之后,我相当有信心这是由用于触发S3上传的挂钩引起的。我对webpack插件了解得不够多,无法对此进行完整描述,但是我对导致该问题的原因进行了有根据的猜测,而我建议的修复程序似乎已经解决了该问题。
插件的作者已经接受了我的请求,并且该修复程序正在等待发布。
如果同时需要修复,则可以这样做(注意,这很脏,应该被视为临时的::
node_modules
文件夹webpack-s3-plugin
的文件夹dist/s3_plugin.js
t.hooks.afterEmit.tapPromise
t.hooks.done.tapPromise
webpack.mix.js
文件中,将require('webpack-s3-plugin')
更改为指向您的javascript文件仅重申一下,这是临时修复,直到发布了最新版本的插件。