【问题标题】:precaching a generated asset in Service Worker在 Service Worker 中预缓存生成的资产
【发布时间】:2020-05-11 07:00:51
【问题描述】:

我有一些在运行时或构建时生成的资源,例如脚本、CSS 等。
文件格式类似于main.min.63716273681.js,其他资源也类似。

不幸的是,我无法使用 sw-precache 库或与我的构建集成的任何东西。

我如何预缓存这些资源,是否可以使用正则表达式来做到这一点?

注意:问题是关于预缓存资源和资源正在由 AEM(Adobe 体验管理器)生成

【问题讨论】:

  • 到底是什么问题?问题是您不知道要缓存的文件的确切名称吗?在这种情况下,如果没有有关构建系统的更多信息,就无法为您提供帮助。否则只需使用toolbox.precache(arrayOfURLs)
  • 是的,我不知道每次构建后生成的数字。
  • 你在使用 webpack 吗?

标签: javascript aem service-worker offline-caching


【解决方案1】:

安装 webpack-manifest-plugin 并在 webpack 配置文件的顶部导入

const ManifestPlugin = require('webpack-manifest-plugin');

在你的 webpack 插件部分使用下面的代码,这将生成一个文件名asset-manifest.json,其中包含由 webpack 构建的所有资产

new ManifestPlugin({
        fileName: 'asset-manifest.json',
        publicPath: your public path here,
 }),

它将生成具有如下内容的文件

// 资产清单.json

{
  "files": {
    "about.js": "/static/js/about.bc816d03.chunk.js",
    "about.js.map": "/static/js/about.bc816d03.chunk.js.map",
    "dashboard.js": "/static/js/dashboard.f180c270.chunk.js",
    "dashboard.js.map": "/static/js/dashboard.f180c270.chunk.js.map",
    "homepage.js": "/static/js/homepage.4dd0316c.chunk.js",
    "homepage.js.map": "/static/js/homepage.4dd0316c.chunk.js.map",
    "login.js": "/static/js/login.1b8cf466.chunk.js",
    "login.js.map": "/static/js/login.1b8cf466.chunk.js.map",
    "logout.js": "/static/js/logout.ac3c5758.chunk.js",
    "logout.js.map": "/static/js/logout.ac3c5758.chunk.js.map",
    "main.css": "/static/css/main.977b6895.chunk.css",
    "main.js": "/static/js/main.a65a1d5d.chunk.js",
    "main.js.map": "/static/js/main.a65a1d5d.chunk.js.map",
    "profile.js": "/static/js/profile.20ae3dae.chunk.js",
    "profile.js.map": "/static/js/profile.20ae3dae.chunk.js.map",
    "runtime-main.js": "/static/js/runtime-main.ad8b0a50.js",
    "runtime-main.js.map": "/static/js/runtime-main.ad8b0a50.js.map",
    "static/js/8.796ce7e3.chunk.js": "/static/js/8.796ce7e3.chunk.js",
    "static/js/8.796ce7e3.chunk.js.map": "/static/js/8.796ce7e3.chunk.js.map",
    "index.html": "/index.html",
    "precache-manifest.e770a629726af82e25b547dd941bae89.js": "/precache-manifest.e770a629726af82e25b547dd941bae89.js",
    "service-worker.js": "/service-worker.js",
    "static/css/main.977b6895.chunk.css.map": "/static/css/main.977b6895.chunk.css.map",
    "static/js/8.796ce7e3.chunk.js.LICENSE.txt": "/static/js/8.796ce7e3.chunk.js.LICENSE.txt",
    "static/media/arvidsson.jpg": "/static/media/arvidsson.4d6f8e0d.jpg",
    "static/media/logo.jpg": "/static/media/logo.8caa15b8.jpg",
    "static/media/pekka.jpg": "/static/media/pekka.1eab475c.jpg"
  },
  "entrypoints": [
    "static/js/runtime-main.ad8b0a50.js",
    "static/js/8.796ce7e3.chunk.js",
    "static/css/main.977b6895.chunk.css",
    "static/js/main.a65a1d5d.chunk.js"
  ]
}

您可以读取asset-manifest.json 文件并获取文件对象并迭代并检查最后具有.js 的键。

希望这能回答你的问题。

【讨论】:

  • 感谢 Vipin 的回答,我正在使用 AEM,资源(clientlibs)正在生成。我可能在某个时候已经迁移到 webpack,所以这个答案很有帮助。
猜你喜欢
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
相关资源
最近更新 更多