J'ai une application React hébergée sur un compartiment S3. Le code est réduit à l'aide de yarn build
(il s'agit d'une application basée sur create-react-app). Le dossier build
ressemble à:Comment faire CloudFront ne cache jamais index.html sur le compartiment S3
build
├── asset-manifest.json
├── favicon.ico
├── images
│ ├── map-background.png
│ └── robot-icon.svg
├── index.html
├── js
│ ├── fontawesome.js
│ ├── packs
│ │ ├── brands.js
│ │ ├── light.js
│ │ ├── regular.js
│ │ └── solid.js
│ └── README.md
├── service-worker.js
└── static
├── css
│ ├── main.bf27c1d9.css
│ └── main.bf27c1d9.css.map
└── js
├── main.8d11d7ab.js
└── main.8d11d7ab.js.map
Je ne veux index.html
être mis en cache, parce que si je mets à jour le code (ce qui provoque le suffixe hexagonal dans main.*.js
mise à jour), je dois la prochaine visite de l'utilisateur de revenir sur la <script src>
modifiez index.html
pour pointer vers le code mis à jour. Dans CloudFront, je peux seulement sembler exclure des chemins, et exclure "/" ne semble pas fonctionner correctement. Je reçois un comportement étrange où je change le code, et si je frappe l'actualisation, je le vois, mais si je quitte Chrome et reviens, je vois le code très obsolète pour une raison quelconque.
Je ne veux pas avoir à déclencher une invalidation sur chaque version de code (via CodeBuild). Y a-t-il un autre moyen? Je pense que l'un des défis est que, comme il s'agit d'une application utilisant React Router, je dois faire un truc en réglant le document d'erreur à index.html
et en forçant un statut HTTP 200 au lieu de 403.
Et parlez-vous d'ajouter cet en-tête dans les métadonnées de l'objet S3? Et correct, quel que soit le chemin de l'URL, je ne veux jamais mettre en cache index.html. Je suis plus préoccupé par la mise en cache des fichiers associés (fichiers JS, CSS, images). – ffxsam
Oui: il est appelé «métadonnées définies par le système» dans la documentation AWS: http://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-object-metadata.html –
Excellent, c'est utile! J'ai mis en place mon processus de déploiement pour utiliser 'aws s3 cp --cache-control max-age = 0' lors de la copie sur le fichier d'index. Fonctionne comme un charme. – ffxsam