场景:
作为微前端实现并托管在 S3 上的共享组件...
- 包含托管在 S3 上的整个应用程序(webpacked)的 JS 包
- JS 包包含带有最新提交的哈希,例如 component.{hash}.js
问题:
当我们发布一个新包时,考虑到浏览器/CDN 缓存,确保新包在发布后被所有客户端使用的最佳策略是什么?重要提示:我们希望客户立即获得更新(内部)。
例子
- 在发布时,生成一个 component.html 文件,该文件根据最新的哈希值拉入包(脚本标签)。将新的 component.html 发送到 S3。客户使用
<link rel-'import' href='somedomain.com/component.html'>
总是给他们最新的发货版本。
问题:捆绑包仍然可以利用 CD/浏览器缓存,但无法缓存 HTML 文件,因为我们需要它在任何版本中都是热的。同样奇怪的是,我们必须进行两次下载才能获得一个捆绑包。
- 作为 NPM 模块交付,客户端可以在构建时使用该模块。
问题:如果我们有 10 个客户端,则所有 10 个客户端都需要构建和发布才能与新组件一起发布。假设 package.lock 不会导致通配符出现问题(不太清楚)。
注:内部组件;可能会发生频繁的变化,例如 AB 测试等。