压缩发生在 __WB_MANIFEST 注入之前

compression happened before __WB_MANIFEST injection

我在 compression-webpack-plugin 中为文件名添加了 console.log 并且 在构建过程的最开始,会打印一条日志,实际上是在将 sw.js 文件的内容复制到一个名为 service-worker.js 的新创建的文件之后,但是此时没有关于 self.__WB_MANIFEST 必须由 workbox precacheAndRoute 宣讲。在构建过程结束时,当信息到达时,一个数组(宣讲时间及其修订)将被替换为 self.__WB_MANIFEST 并注入到 service-worker.js,但不会发生压缩日志。 因此 service-wroker.js.

的压缩文件和原始文件将不兼容

webpack 插件

{
  plugins: [
    // ...
    new WorkboxPlugin.InjectManifest({
      swSrc: './src/setup/sw.js',
      swDest: 'service-worker.js',
      exclude: [/\.(gz|br)$/],
      maximumFileSizeToCacheInBytes: 10 * 1024 * 1024,
    }),
    // ...
    new CompressionPlugin({
      filename(pathData) {
        console.log(pathData)
        return '[path][base].gz'
      },
      algorithm: 'gzip',
      minRatio: 0.8,
      test: /\.(js|css|html|svg|wasm)$/,
   })
  ]
}

packges.json

{
  "webpack": "^5.4.0",
  "compression-webpack-plugin": "^6.0.5",
  "workbox-webpack-plugin": "^6.0.0-alpha.3",
}

this comment 中所述,此问题已解决,您应将 compression-webpack-plugin 升级到 v6.1.1。