当前位置: 首页 > 知识库问答 >
问题:

Workbox服务工作人员在PWA中没有正常工作

云京
2023-03-14

我试图用一个服务人员使用Workbox制作一个非常基本的PWA,但是我有一个问题。我正在使用命令行界面来生成服务工作人员,一切正常,完美的亮点,但我不能将我的index.html添加到运行时缓存中。我必须将其添加到全局模式,以便我的网站在离线模式下工作,但当我更新index.html文件时,除非我清除缓存,否则不会更新。我想要和我的js和css一样的东西。当我升级这些文件时,它们会更新。这是我的工作箱配置文件:

module.exports = {
  globDirectory: "./",
  globPatterns: ["**/*.{html,json}"],
  swDest: "./serviceworker.js",
  // Define runtime caching rules.
  runtimeCaching: [
    {
      // Match any request that ends with .png, .jpg, .jpeg or .svg.  urlPattern: /\.(?:png|jpg|jpeg|svg)$/,
      urlPattern: /\.(?:png|jpg|jpeg|svg)$/,
      // Apply a network-first strategy.
      handler: "NetworkFirst",
      options: {
        // Use a custom cache name.
        cacheName: "images",
      },
    },
    {
      urlPattern: /\.(?:js|css)$/,
      handler: "NetworkFirst",
      options: {
        cacheName: "main",
      },
    },
  ],
};

共有1个答案

伍心水
2023-03-14

我对你的问题的解释是,你不想使用预切,因为你更喜欢没有缓存优先的超文本标记语言。如果是这样,那很好——在这种情况下,你实际上不需要使用workbox-cli

相反,如果您只是使用运行时缓存,您可以完全避免使用Workbox构建工具,而只是部署一个安装默认NetworkFirst路由的Service Worker文件:

importScripts('https://storage.googleapis.com/workbox-cdn/releases/6.1.1/workbox-sw.js');

const strategy = new workbox.strategies.NetworkFirst();
workbox.routing.setDefaultHandler(strategy);

// Ensure that our cache is pre-populated at install time,
// which will help with offline checks.
const urls = [
  '/',
  // Add any other URLs that you want to ensure are cached here.
];
workbox.recipes.warmStrategyCache({urls, strategy});

workbox.core.clientsClaim();

一旦注册了服务辅助角色,所有响应都将在运行时自动缓存,如果您曾经脱机,以前缓存的响应将被用作回退(假设以前有一个请求填充了缓存)。

如果您愿意,可以将此与调用“workbox”混合使用。食谱。温热疗法

 类似资料:
  • 我试图将PWA添加到项目中,但未成功。服务工作者不会缓存服务器请求。请求地址未添加到缓存存储中。因此,脱机模式不起作用。 项目配置: vue水疗中心 使用axios库向服务器发出的请求 服务器响应不包含缓存控制标头 pwa是使用标准vue插件实现的:vue/cli插件pwa vue中的PWA配置。配置。js: 还有这个:浏览器中的开发者控制台-

  • 我创建了react应用程序,它使用股票服务人员缓存文件。我希望该应用程序是一个可下载的PWA,但每当我更新(与heroku) 我是否错过了文档中的一些配置,以便在其为PWA时启用自动更新?或者我可以做些什么来在更新时强制刷新。(我读过这是一个糟糕的UI,但我对此没有意见) 注意:从PC上的浏览器查看时,它会按预期工作。(选项卡全部关闭时更新)

  • 在Chrome中,我的react service worker(使用CRA创建)被永久缓存并服务于旧版本。硬重新加载不会改变任何东西。如果我在开发工具中手动选择bypass for network来修复问题,但显然这不是一个适用于客户端的解决方案。我们的应用程序由Apache提供。基本上,我想知道在这种情况下指定

  • 我使用带有sw工具箱库的service worker。我的PWA缓存除API查询(图像、css、js、html)之外的所有内容。但是如果有一天某些文件会被更改呢。或者如果服务人员。js将被更改。应用程序应该如何知道文件中的更改? 我的服务人员。js: 我不知道在PWA中更新缓存的常用方法是什么。也许PWA应该在后台发送AJAX请求并检查UI版本?

  • 我使用Android架构组件(ViewModel,LiveData),并使用Room从使用存储库的本地Sqlite数据库中获取数据。最外面的观察者很好,问题只出在内部观察者身上。 参见代码: 我用命名和匿名观察者都试过了。我不明白这里有什么问题。 有时它会插入NullPointerExceptions。有时无法更改区域设置。 还有一个问题是,我不确定应该在片段中使用哪一个作为观察者的所有者,或(我