angular-cli - 浏览器加载 index.html 的缓存版本 - angular 7

标签 angular-cli angular7 browser-cache

我有一个在 python 服务器上运行的 angular 7 应用程序,我们正在使用 angular-cli 构建项目文件。在构建时,我正在使用以下命令设置缓存突发选项。

ng build --prod --build-optimizer --aot --output-hashing=all

output-hashing=all 将根据角度文档处理缓存突发。虽然我提供了这个标志,但在部署我们的应用程序文件名后附加了哈希值(styles.a5169d3732258e921e2c.css、main.8dc0644c88c4fbf67797.js)但 index.html 文件总是显示缓存版本。

我想在客户端缓存除 index.html 之外的所有文件。我将如何做到这一点?

最佳答案

几个月前我遇到了同样的问题(我网站的元标记设置错误,因此 index.html 被缓存)。当涉及到该问题时,在线解决方案并不是很具体。

在服务器的配置中设置适当的 header 有帮助(这是一个 Apache 服务器 .htaccess -file; 配置位置和语法可能因您的特定服务器而异 ):

<FilesMatch "\.(html|htm)$">
  FileETag None
  <IfModule mod_headers.c>
    Header unset ETag
    Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
    Header set Pragma "no-cache"
    Header set Expires "Wed, 12 Jan 1980 05:00:00 GMT"
  </IfModule>
</FilesMatch>

上面的配置是从某个地方复制粘贴的,甚至可能是这样,尽管我再也找不到来源了。

此配置关闭 E-Tag header (具有一些奇怪行为的自动更改检测,请参见下面的链接)并禁用 index.html 的所有缓存。

Angular 应用程序的其他部分(如静态图像等)通常无需配置即可自动缓存。不过,我建议您将以下内容添加到服务器配置中,因为否则不会缓存包:
<FilesMatch "\.js$">
  FileETag None
  <IfModule mod_headers.c>
    Header unset ETag
    Header set Cache-Control "private, max-age=31536000"
  </IfModule>
</FilesMatch>

这仅使最终用户(浏览器)能够将捆绑包缓存一年。由于 Angular-CLI 无论如何都会在每次构建的包中添加一个散列,这不会影响功能(但会使您的应用程序更快)。

https://stackoverflow.com/a/8497239/2740014有关更多信息。

关于angular-cli - 浏览器加载 index.html 的缓存版本 - angular 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57372153/

相关文章:

javascript - 为什么在 Angular 项目中没有 Angular-CLI 为 'model' 生成命令?

angular - 安装旧的 Angular 版本 5?

angular - 我可以动态加载 HTML 字符串作为组件模板并在 Angular 7 中完全编译它吗?

angular - 在 <agm-direction> 中拖动原点时方向发生变化时获取坐标

c# - 使用 Application_BeginRequest + 重定向进行 HTML 版本控制中的 Javascript、CSS

java - 如何更改 dist 文件夹路径而不覆盖输出文件夹中的现有文件

javascript - D3.js Angular CLI,范围在 tick() 方法中丢失

angular7 - 如何绑定(bind) `ngx-intl-tel-input` 只有 "internationalNumber"

javascript - 仅在离线时使用 ServiceWorker 缓存

caching - 在客户端刷新 GWT 应用程序