在S3中上载的Laravel混合版本控制认为以前的哈希值

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

[使用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;但是我不确定。我在这里想念什么?

enter image description here

如果想详细了解幼虫侧,我使用了this guide

laravel amazon-s3 npm webpack laravel-mix
1个回答
0
投票

在深入研究S3插件源之后,我相当有信心这是由用于触发S3上传的挂钩引起的。我对webpack插件了解得不够多,无法对此进行完整描述,但是我对导致该问题的原因进行了有根据的猜测,而我建议的修复程序似乎已经解决了该问题。

插件的作者已经接受了我的请求,并且该修复程序正在等待发布。

如果同时需要修复,则可以这样做(注意,这很脏,应该被视为临时的::

  1. 浏览到您的node_modules文件夹
  2. 找到名为webpack-s3-plugin的文件夹
  3. 复制文件dist/s3_plugin.js
  4. 粘贴到项目中的某处
  5. 打开文件并找到行t.hooks.afterEmit.tapPromise
  6. 替换为t.hooks.done.tapPromise
  7. webpack.mix.js文件中,将require('webpack-s3-plugin')更改为指向您的javascript文件

仅重申一下,这是临时修复,直到发布了最新版本的插件。

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