• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

1.1K
Views
La aplicación Angular 12 aún se almacena en caché con output-hashing = all

Tengo una aplicación Angular 12 que tiene diferentes entornos de compilación (dev/staging/prod) y los configuré con hash de salida en angular.json :

 "configurations": { "production": { "fileReplacements": [ { "replace": "src/environments/environment.ts", "with": "src/environments/environment.prod.ts" } ], "optimization": true, "outputHashing": "all" <-----

Los archivos de salida incluyen un hash, pero sigo viendo la versión anterior a menos que haga una actualización completa en el navegador.

 main.07258fce7f84f8b6013e.js polyfills.4cc5b416b55531e38cd8.js runtime.734c276f75a5d81bc54b.js

La página de destino es solo un formulario de inicio de sesión, pero la versión se muestra debajo del formulario. Muestra la versión anterior hasta la actualización completa en el navegador, momento en el que muestra correctamente la nueva versión.

¿Esto se debe a que index.html se almacena en caché junto con todas sus antiguas referencias de JS?

Si es así, ¿cómo cacheo esto?

about 3 years ago · Santiago Trujillo
2 answers
Answer question

0

En caso de que esté utilizando un trabajador de servicio (por ejemplo, @angular/pwa que instala @angular/service-worker ), el navegador almacena en caché toda la aplicación angular. Esto incluye index.html + todos los archivos javascript + todas las hojas de estilo.

Para enviar una nueva versión de su aplicación a sus usuarios, debe hacer 2 cosas:

Actualice su ngsw-config.json en cada nueva versión:

 { "version": 1, // Or ascending ... }

Llame SwUpdate :

 constructor(private swUpdate: SwUpdate) { ... //#region Check for updates if (this.swUpdate.isEnabled) { this.swUpdate.activated.subscribe((upd) => { window.location.reload(); }); this.swUpdate.available.subscribe((upd) => { this.swUpdate.activateUpdate(); }, (error) => { console.error(error); }); this.swUpdate.checkForUpdate().then(() => { }).catch((error) => { console.error('Could not check for app updates', error); }); } //#endregion }

aquí hay un ejemplo

about 3 years ago · Santiago Trujillo Report

0

Pude resolver esto instruyendo a la política de control de caché del servidor web para que no almacene en caché el archivo HTML. Esto es necesario porque el archivo HTML contiene las referencias a los scripts hash de Angular y CSS.

Estamos lanzando actualizaciones frecuentes, así que por ahora, estoy configurando esto para que no se almacene en caché, pero se puede ajustar a períodos de tiempo más largos según sea necesario.

En nuestro caso, usamos IIS y tuve que crear una regla de reescritura de IIS en el archivo web.config.

 <outboundRules> <rule name="RewriteCacheControlForHTMLFiles" preCondition="FileEndsWithHtml"> <match serverVariable="RESPONSE_Cache_Control" pattern=".*" /> <action type="Rewrite" value="max-age=0" /> </rule> <preConditions> <preCondition name="FileEndsWithHtml"> <add input="{REQUEST_FILENAME}" pattern="\.html$" /> </preCondition> </preConditions> </outboundRules>
about 3 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error