1. ホーム
  2. ジャバスクリプト

[解決済み】RequireJSが必須スクリプトをキャッシュしないようにする。

2022-03-29 01:38:06

質問

RequireJSは、内部で必要なjavascriptファイルをキャッシュするようなことをしているようです。必要なファイルの1つに変更を加えると、変更を適用するためにファイル名を変更する必要があります。

ファイル名の末尾にクエリストリングパラメータとしてバージョン番号を付加する一般的なトリックは、requirejsでは機能しません。 <script src="jsfile.js?v2"></script>

私が探しているのは、RequireJS必須スクリプトの内部キャッシュを防ぐ方法で、スクリプトファイルが更新されるたびに名前を変更する必要はありません。

クロスプラットフォームでの解決策

現在、私は urlArgs: "bust=" + (new Date()).getTime() は開発中の自動キャッシュバスターに、そして urlArgs: "bust=v2" で、更新されたスクリプトをロールアウトした後、ハードコードされたバージョン番号をインクリメントします。

注意

Dustin Getz 氏は最近の回答で、このように Javascript ファイルが連続的に更新されると、デバッグ中に Chrome Developer Tools がブレークポイントをドロップすると述べています。回避策としては debugger; をコードに含めると、ほとんどのJavascriptデバッガでブレークポイントをトリガすることができます。

サーバー固有の解決策。

NodeやApacheなど、お使いのサーバー環境でより良く機能する可能性のある特定の解決策については、以下の回答のいくつかをご覧ください。

どのように解決するのですか?

RequireJSは、キャッシュバストのために、各スクリプトのURLに値を追加するように設定することができます。

RequireJSのドキュメントから( http://requirejs.org/docs/api.html#config ):

urlArgs : RequireJSが使用するURLに追加される追加のクエリ文字列引数 は、リソースの取得に使用します。ブラウザや サーバーが正しく設定されていない場合。

例:すべてのスクリプトに "v2" を追加する。

require.config({
    urlArgs: "bust=v2"
});

開発目的では、タイムスタンプを追加することで、RequireJSがキャッシュをバイパスするように強制することができます。

require.config({
    urlArgs: "bust=" + (new Date()).getTime()
});