(Angular 4、AOT、缓存刷新) 如何在服务器发生代码更改时强制终端用户浏览器进行硬刷新?

(Angular 4, AOT, cache refresh) How to force end users browsers to do a hard refresh when code changes occur on server?

当我准备好将我的代码更改发布到我们的服务器时,我使用 Angular AOT 构建和编译并复制我的文件。有时最终用户没有得到这些更改,必须进行硬刷新,或者进入他们的浏览器历史记录并清除缓存的图像和文件。当我在服务器上更改代码时,推荐的强制硬刷新方法是什么?

我读过有关将版本号附加到 .css 和 .js 文件的信息,以便浏览器重新下载新命名的文件,但 angular AOT 创建 ngfactory.js文件和 ngfactory.js.map 文件等,我想确保我这样做是正确的。

此外,我正在使用 IIS 托管网站,所以如果有办法通过 ISS 实现刷新,我也愿意接受。

当您使用 ng build --prod 构建时,这也意味着 aot,生成的包具有新名称..

一种常见的方法是将 IIS 配置为永远不允许缓存 index.html.. 这样,如果客户端看到相同的包名称,在始终最新的 index.html 中,它会被缓存.. 但是如果您生成新的捆绑包,则会下载它。

相关SO答案here.

此外,您可以google“缓存清除”找到很多资源。

为此,您可以设置 iis 不缓存 index.html 文件。为此,您只需包含 web.config 文件并将此设置添加到其中。

<configuration>

  <location path="index.html">
    <system.webServer>
      <httpProtocol>
        <customHeaders>
          <add name="Cache-Control" value="no-cache" />
        </customHeaders>
      </httpProtocol>
    </system.webServer>
  </location>

</configuration>