Polymer Service Worker缓存和路由问题

时间:2018-12-21 06:00:17

标签: javascript polymer single-page-application service-worker

我有一个非常标准的Polymer 2应用程序,带有以下polymer.json文件:

{
  "entrypoint": "index.html",
  "shell": "src/my-app.html",
  "autoBasePath": true,
  "fragments": [
    "src/my-page-stats.html",
    ...
    "src/my-page-404.html"
  ],
  "sources": [
    "images/**/*",
    "src/**/*",
    "libs/**/*"
  ],
  "extraDependencies": [
    "bower_components/webcomponentsjs/*.js",
    "!bower_components/webcomponentsjs/gulpfile.js",
    "manifest.json",
    "src/lib/Utils.js"
  ],
  "lint": {
    "rules": ["polymer-2"]
  },
  "builds": [
    {
      "preset": "es5-bundled"
    },
    {
      "preset": "es6-bundled"
    },
    {
      "preset": "es6-unbundled"
    }
  ],
  "lint": {
    "rules": ["polymer-2"],
    "ignoreWarnings": ["invalid-polymer-expression"]
  }
}

libs目录包含一堆符号链接:

total 12
Sortable.js -> ../bower_components/Sortable/Sortable.js
datalist-polyfill.min.js -> ../../node_modules/datalist-polyfill/datalist-polyfill.min.js
ejs.js -> ../../node_modules/ejs/ejs.js
ejs.min.js -> ../../node_modules/ejs/ejs.min.js
leaflet -> ../../node_modules/leaflet/dist/
moment-precise-range.js -> ../../node_modules/moment-precise-range-plugin/moment-precise-range.js
moment-timezone-with-data.js -> ../../node_modules/moment-timezone/builds/moment-timezone-with-data-2012-2022.js
moment.js -> ../../node_modules/moment/moment.js

我的服务人员遇到一些问题,我不知道该怎么办:

  • libs文件夹没有被缓存。如果网络中断,浏览器将尝试加载libs中的所有文件。我以为是这样,因为在我的sources中的polymer.json下,我有"libs/**/*",我想知道它们是否链接是一个问题?

  • 路由routes/appInfo.js 必须被缓存,并且现在不被缓存。这是一个动态Javascript文件,它设置了一个全局变量,在整个应用程序中使用。它不会被缓存,因为它在任何地方都没有被提及为“特殊”文件,而是...。

  • 服务工作者必须忽略路由/routes/passwordRecover/**。现在的问题是,如果用户请求密码恢复令牌,并且他们之前已经加载了该站点,则该请求将由服务工作者处理,该服务工作者会将他们直接重定向到默认的index.html。因此,重置实际上不会发生。

这里的问题是我什至不确定要更改哪些文件。我看着official documentation for service worker in Polymer 2.0,但仍然有疑问。

例如:

  • 如果我指定--sw-precache-config config-file.json,则必须自己编写from scratch的配置文件。有没有办法至少看到默认的“起点”,这样我才不会犯愚蠢的错误?

  • 如何强制缓存特定的URL(请参阅routes/appInfo.js),如何阻止其他URL的缓存(请参见/routes/passwordRecover/**)以及如何检查为什么{{1} }没有被缓存?

0 个答案:

没有答案