如果在缓存中如何使用Angular 2代码在任何浏览器中强制从服务器加载index.html

时间:2019-06-15 12:53:23

标签: angular angular2-template

当前,我正在Angular 2 Web服务器上托管一个Apache 2.4应用程序,并且在客户端的浏览器中,新的生产部署之后,最新的网站更改不会呈现!我发现index.html被浏览器缓存。所有css和angular bundle文件的链接都可以在index.html上完成,因此它是应用程序的入口。我们有成千上万的活跃用户,因此我们不能坚持要求他们按下CTRL+F5或执行hard reload

我已经用不同的生产方式(例如Thread1Thread2)进行了检查,index.html也已经包含以下元标记。

<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate">
<meta http-equiv="Pragma" content="no-cache">
<meta http-equiv="Expires" content="0">

我使用了角度代码,通过查询参数检查了缓存清除,并且还遵循了在每个组件中也使用module.id的良好做法。

@Component({
    ...
    moduleId: module.id,
    ...
})

所以我的问题是

  1. 在这种情况下,如何强制浏览器在所有用户的计算机上使用Angular 2 code来加载新的index.html? -如果可以的话,请告诉我如何解决这个问题。

您的帮助将不胜感激!

2 个答案:

答案 0 :(得分:0)

您正在强制浏览器获取HTML页面的新版本,但是如果您生成具有相同名称的包的最新版本,则新HTML将以旧的js和CSS文件结尾。

一种常见的做法是使用一些自动生成的代码来修改包名称,以确保新版本的HTML和旧版本的请求不同的文件。 (缓存无效)

答案 1 :(得分:0)

问题不是index.html(如Andoni所说),您可以在捆绑文件名称上添加自动生成的随机前缀。

您可以使用以下命令对其进行存档:

ng构建-全部输出散列

更多选项在这里:

https://angular.io/cli/build