我们有一个Angular 6应用程序.Nginx上有.SSL是开启的.

当我们部署新代码时,大多数新功能都工作得很好,但有些更改就不行了.例如,如果前端开发者更新服务连接并进行部署,用户必须打开隐名窗口或清除缓存才能看到新功能.

哪些类型的更改不会自动更新?为什么他们与其他人不同?

避免这个问题的常见解决方案是什么?

推荐答案

问题是,当静态文件被缓存时,它可能会在过期之前被存储很长一段时间.但是,如果您对网站进行了更新,这可能会造成麻烦,因为文件的缓存版本存储在访问者的浏览器中,他们可能无法看到所做的更改.

Cache-busting通过使用唯一的文件版本标识符告诉浏览器文件的新版本可用,解决了浏览器缓存问题.因此,浏览器不会从缓存中检索旧文件,而是向源服务器请求新文件.

Angular cli通过为build命令提供--output-hashing标志来解决这个问题.

查看官方文档:https://angular.io/cli/build

示例(旧版本)

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

下面是您可以在--output-hashing中传递的选项

  • 无:未执行哈希
  • 媒体:仅向通过[url | file]-加载程序处理的文件添加哈希
  • bundles:只向输出bundle添加哈希
  • 全部:将散列添加到介质和Bundle 包

Updates

对于较新版本的angular(例如angular 10),命令现在已更新:

ng build --prod --aot --outputHashing=all

Angular相关问答推荐

添加@ nx/webpack插件 destruct 了Nativescript构建

如何使用ANGLING HTTP.POST并将类型更改为键入的回复?

在Angular 为17的独立零部件中使用@NGX-平移

列表和映射的SCSS语法

RxJS如何按顺序进行POST请求,只有在前一个完成后才会触发新的请求?

Angular 15:在范围内提供相同标记时附加到提供的值

需要做什么才能使 ErrorHandler 正常工作?

Angular 测试被认为是成功的,即使有错误

RxJS - .withLatestFrom 的多个来源

Angular2 Material Dialog css,对话框大小

如何在angular 5的组件中格式化日期

Angular 6 - NullInjectorError:单元测试中没有 HttpClient 的提供者

NgrxStore 和 Angular - 大量使用异步管道或在构造函数中只订阅一次

Angular为 4 的可扩展表格行,带有Angularmaterial

Angular @NGRX中这三个点的含义是什么

angular2中的httpinterceptor类似功能是什么?

Failed to execute 'setAttribute' on 'Element': ']' is not a valid attribute name

*ngIf 带有多个异步管道变量

实现autocomplete功能

如何从materialAngular使用分页器?