私はreactjsとwebpackを使用して開発されたwebアプリケーションに取り組んでいます。すべての展開後、ユーザーにブラウザーキャッシュをクリアしてブラウザーを再起動するように依頼する必要があります。 JavaScriptバンドルファイルとcssファイルの両方がユーザーのブラウザーにキャッシュされていると思います。
これらのファイルをキャッシュしないように強制したり、サーバーから最新のファイルをダウンロードさせたりするにはどうすればよいですか。
<html>
<head>
<meta charset="utf-8">
<title>My App</title>
<link rel="stylesheet" href="styles.css" media="screen" charset="utf-8">
</head>
<body>
<div id="app"></div>
<script src="bundle.js"></script>
</body>
</html>
html-webpack-plugin を使用できます
plugins: [
new HtmlWebpackPlugin({
hash: true
})
]
ハッシュ:true | trueの場合はfalse、含まれているすべてのスクリプトとcssファイルに一意のwebpackコンパイルハッシュを追加します。これは、キャッシュの無効化に役立ちます。
テンプレートhtmlでhtml-webpack-pluginを使用し、ハッシュ構成を出力に含める必要があります。したがって、webpack構成は次のようになります。
output: {
filename: "[name].[hash].js",
path: <path to your bundle folder>
}
new HTMLWebpackPlugin({
hash: true,
template: paths.resolveFromRoot("src/index.html") //where you want the sample template to be
})
そして、あなたのindex.htmlはこのようなものになります:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="expires" content="0">
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<title>Title</title>
</head>
<body>
<div id="app"></div>
</body>
</html>
HTML webpackプラグインは、バンドルフォルダーに作成されたindex.htmlに変更されたスクリプトを自動的に挿入します。お役に立てれば。キャッシュの修正については、 https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching を参照してください。ここでは、バージョン管理とサーバー応答ヘッダーの構成が効果的であると述べていますキャッシングソリューション。
余計なことをせずにこの問題を回避する簡単な方法があります。 webpackの組み込みハッシュ機能を使用します。
バンドルにハッシュを追加することについて読むことができます ここ 。このタイトルは「長期キャッシュ」ですが、ファイルが変更されない場合にのみ当てはまります。しかし、バンドルを再構築すると、新しい一意のハッシュが取得されるので、ブラウザーはそれを新しいファイルと見なしてダウンロードします。