在 S3 中上传时的 Laravel-mix 版本控制在以前的哈希中思考

标签 laravel amazon-s3 npm webpack laravel-mix

通过使用 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 方面。

最佳答案

在深入了解 S3 插件源之后,我相当确信这是由用于触发 S3 上传的 Hook 引起的。我对 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 文件

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

关于在 S3 中上传时的 Laravel-mix 版本控制在以前的哈希中思考,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57380123/

相关文章:

php - 如何更改 Carbon 的 diffForHumans 格式

php - 数据库在迁移期间未配置 laravel

ruby-on-rails - 从 amazon s3 rails 提供图像

json - boto3 如何将 dict/json 输出上传到 s3 存储桶?

npm - 使用来自 Bazel 的 npm

火警警告 : Invalid query string segment - Warning when deploying simple Firebase Cloud function

php - 如何在 Laravel 中更新数据库之前更改字段的值

php - Laravel 多个嵌套 View

amazon-web-services - 从 Amazon Redshift 导出到 RDS MySQL 数据库

vue.js - npm 错了!纤维@4.0.2安装: `node build.js || nodejs build.js` when installing Vuetify in Nuxt