Cuando actualicé mi sitio, ejecuté npm run build y cargué los nuevos archivos en el servidor. Todavía estoy buscando la versión anterior de mi sitio.
Sin React, puedo ver la nueva versión de mi sitio con eliminación de caché. Hago esto:
archivo anterior
<link rel="stylesheet" href="/css/styles.css">Archivo nuevo
<link rel="stylesheet" href="/css/styles.css?abcde">¿Cómo puedo hacer algo como esto o lograr la eliminación de caché con la aplicación Create React?
Hay muchos hilos en el GitHub de la aplicación create react sobre esto, pero nadie tiene una respuesta adecuada/simple.
EDITAR: create-react-app v2 ahora tiene el trabajador de servicio deshabilitado de forma predeterminada
Esta respuesta solo aplica para CRA v1
Esto probablemente se deba a su trabajador web.
Si observa su archivo index.js, puede ver
registerServiceWorker();¿Nunca te preguntaste qué hizo? Si echamos un vistazo al archivo del que se importó, podemos ver
// In production, we register a service worker to serve assets from local cache. // This lets the app load faster on subsequent visits in production, and gives // it offline capabilities. However, it also means that developers (and users) // will only see deployed updates on the "N+1" visit to a page, since previously // cached resources are updated in the background. // To learn more about the benefits of this model, read {URL} // This link also includes instructions on opting out of this behavior.Si desea eliminar el trabajador web, no solo elimine la línea. Importe cancelar el registro y llámelo en su archivo en lugar del registro.
import { unregister } from './registerServiceWorker';y luego llamar
unregister()PD: cuando cancela el registro, se necesitará al menos una actualización para que funcione
Tuve el mismo problema cuando uso create-react-app (y lo implemento en heroku). Sigue mostrando la versión anterior de mi aplicación 😡.
Encontré que el problema parece estar en el lado del navegador, almacena en caché mi antiguo index.html con su paquete js desactualizado
Es posible que desee agregar lo siguiente a su encabezado de respuesta del lado del servidor
"Cache-Control": "no-store, no-cache" o si también está utilizando heroku create-react-app-buildpack , actualice el archivo static.json
"headers": { "/**": { "Cache-Control": "no-store, no-cache" } }Creo que de esta manera aún puedes mantener a ese trabajador de servicio pobre 😂, y el contenido más reciente se mostrará en la carga N+1 (segunda actualización)
Espero que esto ayude...
Como se menciona en algunas de las respuestas anteriores aquí, tanto el trabajador del servicio como los encabezados de caché (falta de) pueden conspirar en su contra cuando se trata de ver versiones antiguas de su aplicación React.
Los documentos de React establecen lo siguiente cuando se trata de almacenamiento en caché :
El uso
Cache-Control: max-age=31536000para sus activos debuild/staticyCache-Control: no-cachepara todo lo demás es un punto de partida seguro y efectivo que garantiza que el navegador de su usuario siempre buscará un archivoindex.htmlactualizado. , y almacenará en caché todos los archivosbuild/staticdurante un año. Tenga en cuenta que puede usar la caducidad de un año enbuild/staticde forma segura porque el hash del contenido del archivo está incrustado en el nombre del archivo.
Como lo mencionó @squarism, las versiones anteriores de create-react-app tenían la opción de exclusión voluntaria del registro de trabajadores de servicio, mientras que las versiones más nuevas son de opción . Puede leer más sobre eso en los documentos oficiales . Es un proceso bastante sencillo hacer coincidir su configuración con la última plantilla si comenzó con una versión anterior de create-react-app y desea cambiar al nuevo comportamiento.
Preguntas relacionadas: