require.configをどのように定義していますか?require.jsをインポートする前に有効にするには、次のようにコーディングする必要があります。
<script type="text/javascript">
var require = {
baseUrl: "/scripts/",
waitSeconds: 15,
urlArgs : "bust="+new Date().getTime()
};
</script>
<script data-main="app/main" src="/scripts/require.js"></script>
具体的には、require.jsをインポートする前に、「require」という名前のオブジェクトを作成する必要があります。
アップデート
Jesseが以下のコメントで指摘しているように、本番環境で使用するためにrequire{}オブジェクトに適用する必要のある拡張機能がいくつかあります。上記の例は、RequireJSのドキュメントから抜粋したものであり、この質問に答えるために可能な限り変更されていません。
実稼働環境で使用するために考慮すべき点がいくつかあります。
- キャッシュバスティング変数として現在の日時を使用する代わりに、開発環境のビルド番号を使用する必要があります。これにより、クライアントはリリース間でJavascriptをキャッシュできますが、ソフトウェアの更新を行うたびにクライアントはキャッシュを更新します。
- Jesseは、スクリプトのdata-main属性を使用する代わりに、require{}の機能を使用して依存関係を指定します。それが厳密に良いかどうかはわかりませんが、見た目はすっきりしていると思います。
- 必要に応じてwaitSecondsを調整します。RequireJSドキュメントの値の例を使用しましたが、必要に応じて値を調整するか、省略してください。
したがって、これらの手法を適用すると、コードは次のようになります。
<script type="text/javascript">
var require = {
baseUrl: "/scripts/",
waitSeconds: 15,
urlArgs : "bust="+{{buildNumber}},
deps : ['app/main']
};
</script>
<script src="/scripts/require.js?bust={{buildNumber}}"></script>
この場合、{{buildNumber}}はサーバーによって提供される値であることに注意してください。
更新2
urlArgsキャッシュバストソリューションには問題があります。残念ながら、ユーザーとユーザーのWebブラウザの間にある可能性のあるすべてのプロキシサーバーを制御することはできません。これらのプロキシサーバーの一部は、残念ながら、ファイルをキャッシュするときにURLパラメータを無視するように構成できます。これが発生した場合、間違ったバージョンのJSファイルがユーザーに配信されます。
(プレフィックス)やmyModule.buildNumber.js(ポストフィックス)などのJavaScriptファイル名リクエストでを使用することbuildNumber
をお勧めします。buildNumber.myModule.js
baseUrlを変更することにより、プレフィックススタイルを使用できます。
baseUrl: "/scripts/buildNumber",
baseUrlの最後に「/」がないことに注意してください。
postfixソリューションを使用するには、require.jsの修正バージョンを使用する必要があります。あなたはここでこれについてもっと読むことができます:https ://stackoverflow.com/a/21619359/1017787
明らかに、どちらの場合でもbuildNumber
、リリースごとに変わるバージョン番号のタイプに置き換えるために、何らかのソリューションを使用する必要があります。