2017-06-26 2 views

Antwort

1

Nein, Sie müssen nicht Cloudfront Verteilung neu erstellen.

Eine gängige Praxis ist, einen Hash zu dem statischen Vermögenswert anzuhängen, zB:

<script src="myapp.bundle.js?v=12345678"></script> 

Der Hash ist in der Regel die MD5/SHA1-Hash der Datei. Einige verwenden möglicherweise den Zeitstempel der Zeit, in der Sie den Code erstellen. Nachdem Sie den Dateiinhalt aktualisiert und eine neue Bereitstellung vorgenommen haben, sollte daher ein neuer Hash verwendet werden. Betrachten Sie die folgende Strömung als Client:

  1. Ein Client-Anfragen für myapp.bundle.js?v=1
  2. Cache existiert noch nicht, Proxies Cloudfront die Anforderung an S3 direkt und speichert den Inhalt.
  3. Cloudfront liefert zwischengespeicherten Inhalt für alle nachfolgenden Anforderungen an myapp.bundle.js?v=1.
  4. Jetzt haben Sie Ihren Code aktualisiert und auf S3 bereitgestellt (mit einem neuen Hash in Ihrer index.html).
  5. Clients fordern jetzt myapp.bundle.js?v=2 statt
  6. wiederholen 2-3 und so weiter

Das Hash Anfügen in der Regel von Build-Tool wie gulp und webpack mit Plugins erfolgt.

+0

Diese tatsächlich Sinn macht, würde Ich mag, um zu versuchen. Ich habe create-react-app verwendet, weißt du, welche Änderungen ich machen muss, um die Bundle-Version zu haben? – nomadus

+0

Ich glaube, es so für Sie tut schon https://github.com/facebookincubator/create-react-app/blob/master/packages/react-scripts/config/webpack.config.prod.js#L74 –

+0

Ich überprüfte Es fügt einen Hash-Code in die js-Dateien ein, aber ich sehe nicht, dass sich der Hash-Wert ändert. – nomadus

0

Zu dieser Lösung komplett zu machen, erstellen reagieren-App HtmlWebpackPlugin verwendet Script-Tag in die Datei index.html zu injizieren.

new HtmlWebpackPlugin({ 
     inject: true, 
     template: paths.appHtml, 
     minify: { 
     removeComments: true, 
     collapseWhitespace: true, 
     removeRedundantAttributes: true, 
     useShortDoctype: true, 
     removeEmptyAttributes: true, 
     removeStyleLinkTypeAttributes: true, 
     keepClosingSlash: true, 
     minifyJS: true, 
     minifyCSS: true, 
     minifyURLs: true, 
     }, 
     hash:true 
    }), 

Um die Details zu sehen, finden Sie in der Dokumentation https://github.com/jantimon/html-webpack-plugin#configuration: Um einen Hash, die node_modules ändern \ reagieren-Scripts \ config \ webpack.config.prod.js wie unten (true Zeile hinzugefügt Hash) anhängen

+0

Nein, Sie müssen so etwas nicht zur Create React App hinzufügen. Es fügt bereits den Hash hinzu. –

+0

CRA verwendet Webpack intern. –

Verwandte Themen