所以我的公司正在为我们的应用程序使用微前端架构。这是我一直在这里开创的一个项目,到目前为止它非常成功。但是,我希望就我们面临的一项突出挑战获得一些建议。
当您使用 Webpack 构建 JavaScript 应用程序时,其中一个选项是向 URL 添加哈希。每次构建都会生成此哈希,因此只有在文件本身发生更改时哈希才会更改。所以文件名看起来像这样:
app.ab12cd.js
这样做的好处是浏览器缓存。浏览器会尝试缓存一些东西以避免消耗过多的数据。因此,如果它再次看到相同的文件名/URL,它将只使用缓存的版本,而不是重新下载它。因为文件名中的哈希只有在文件被重新构建时才会改变,所以我们可以安全地依赖浏览器缓存这个文件来减少我们用户的在线下载负担,同时仍然相信他们将永远查看最新更改。
这是我们的微前端架构面临的挑战。指导原则之一是每个微前端都可以单独发布,这意味着基础应用程序(即用户导航到的初始应用程序)和它将加载的微前端应用程序之间没有直接依赖关系。
我们通过简单的静态标签来实现这一点。每次我们添加一个新的微前端,我们只需要更新一次基础应用来添加一个新的标签:
<script src="micro-frontend/assets/js/app.js"></script>
在上面的示例中,该 URL 使用 nginx 代理重定向到实际部署的微前端。由于涉及我们公司基础设施的愚蠢和令人沮丧的原因,这是一个相对 URL,但这是完全不同的。
重点是您会注意到它指向“app.js”,而不是“app.12ab34.js”。我们没有使用哈希,因为我们不想在每次微前端更改时更新基础应用程序。相反,我们返回一个 Cache-Control 标头以防止微前端的任何浏览器缓存。
这也不理想,因为在我们获得独立性的同时,我们失去了对微前端代码的缓存。
所以,我的问题是:如果我们要在微前端的文件名中启用哈希,有没有一种方法可以设置基础应用程序,我们不必为哈希更改更新它?换句话说,有没有一种完全不同的方式来连接这些我还没有想到的应用程序?
太感谢了。