Angular 上的缓存清除

Aks*_*mar 1 javascript typescript angular

我有一个有角度的应用程序,部署后我经常收到最终用户的抱怨,他们无法看到新功能(他们仍然必须在更改反映之前ctrl+ )。f5

我需要合并缓存清除吗?经过一番谷歌搜索后,我看到了以下命令:

ng build --output-hashing=all
Run Code Online (Sandbox Code Playgroud)

我尝试在部署管道中使用它,它能够解决一些问题,但不是全部。有一些更改我仍然需要做ctrl+ f5

如何确保最终用户更新我的应用程序,而不要求他们清除自己的缓存?

{
    "name": "portfolio",
    "version": "0.0.0",
    "scripts": {
    "ng": "ng",
    "start": "ng serve",
    "build": "ng build",
    "test": "ng test",
    "lint": "ng lint",
    "e2e": "ng e2e",
    "prod-build-dev-old": "ng build --prod --configuration=dev --build-optimizer",
    "prod-build-dev": "ng build --prod --configuration=dev --build-optimizer --aot --output-hashing=all",
    "prod-build-staging": "ng build --prod --configuration=staging --build-optimizer"
},
Run Code Online (Sandbox Code Playgroud)

sel*_* mn 7

我认为这是浏览器缓存的问题。尽管 Angular 默认情况下包含缓存清除,但它需要您手动关闭 index.html 上的缓存才能使其有机会运行。

我建议在您的中添加以下三行index.html

<!doctype html>
<html>
  <head>
    ...

    <!--  Add the 3 following lines -->

    <meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="expires" content="-1">

    ...
  </head>
  <body>
    ...
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

部署这些更新后,您的客户无需ctrl + f5在每次部署后都获得新功能。

有关浏览器缓存控制的更多信息,请查看: MDN 中的Cache-Control

  • 缺少的部分(我添加到你的答案中)是 Angular 会在更改时进行良好的缓存和缓存清除,但要做到这一点,index.html 不得被缓存。 (3认同)
  • @AkshayAmar,禁用缓存通常会损害性能。它可能会使 CDN 和 ISP 代理(例如移动运营商常用的)失效。它不会影响新用户的首次加载,但后续导航可能会更慢。然而......缓慢取决于您下载的资源量。 (2认同)