2

我正在使用 Create react app 和 service worker。但是,有时当我构建一个新版本时,一些 js 块仍然从服务工作者加载,它们不应该加载?而不是加载一个js文件,它实际上加载了一个html。清除缓存并重新加载页面后,一切正常。

  1. 我没有在 Nginx 上缓存服务人员。每次我刷新页面时,都会从服务器加载 service worker 文件。

  2. 我正在使用 react-loadable

我该如何解决这个问题?任何帮助将不胜感激。

4

1 回答 1

1

正如您所提到的react-loadable,我假设您在应用程序中使用异步组件加载。如果这是真的,那么您可能面临与我相同的问题。

每当新版本发布时,新的 service worker 就会被安装。默认情况下,在会话完成之前它不会被激活(所有选项卡/浏览器关闭)。为了立即激活它,skipWaiting使用参数并在sw-precache-webpack-pluginwebpackcreate-react-app配置中设置。所以现在,旧的服务工作者和所有相关的缓存文件都将被删除,因为新的服务工作者正在承担责任。在大多数情况下这很好,但在我们处理异步组件加载时就不行了。对于这种情况,我们不希望删除旧块,因为我们的应用程序正在引用它们。为此,我们需要设置skipWaiting: false.sw-precache-webpack-plugin

更多信息可以在这个线程中找到。

于 2018-07-31T18:11:18.790 回答