2013-04-25 9 views
16

Durandal jsおよびhtmlファイルのバージョニングにはどのような方法が適していますか?Durandalキャッシングの問題/バージョニング戦略

私は、開発中にブラウザキャッシュを無効にして、リフレッシュごとに最新のファイルを受け取る必要があることに気付きました。これは開発中の必須事項です。

しかし、懸念しているのは、継続的な展開戦略(1日に複数回展開)でプロダクションに出掛けると、そのユーザーのブラウザは予期せぬ動作につながる古いバージョンのアプリケーションをキャッシュすることになります。

気になるアプローチは、あらゆるリクエストに埋め込まれたバージョン番号があるように、何とかjsとhtmlのURLをバージョンアップすることです。しかし、私はDurandalの枠組みの中でその仕事を内部的に行う方法は不明です。

答えて

27

ここでは、私が向いている方向を示します。基本的には、これを処理するためにrequirejsに組み込まれているものがあります。

私のmain.jsの一番上にあるrequirejs.configの呼び出しでは、requirejsがモジュールを呼び出すたびにurlArgsプロパティを設定することができます。

requirejs.config({ 
    paths: { 
     'text': 'durandal/amd/text' 
    }, 
    urlArgs: 'v=1.0.0.0' 
}); 

私はちょうどブラウザのキャッシュを無効にするバージョン番号をインクリメントすることができますrequirejsモジュールの新しいバージョンを取得するには、本番ユーザーを強制したいです。

(私のプロジェクトでは、メインのASP.NET MVCアセンブリを含むアセンブリのバージョン番号をこのプロパティに挿入する方法がありますが、そのコードは上記の例の単純さから逸脱していました)。

これが誰かを助けることを願っています!

+1

パーフェクト、私が望む解決策のタイプも – GONeale

+0

これは私にとってはうまくいかないようですが、ビュー/ビューモデルはまだ古いバージョンを引き上げています。 – ccorrin

+0

要求されたビューとビューモデルに、URLにバージョン番号が付加されていますか? –

3

.NETの場合は、App_Start/BundleConfigでスクリプトバンドルとしてメインbuilt.jsファイルを追加します。

public static void RegisterBundles(BundleCollection bundles) 
    { 
     //... 
     bundles.Add(new ScriptBundle("~/Scripts/main-built").Include(
       "~/App/main-built.js")); 
     //... 
    } 

リファレンスあなたのインデックスページのスクリプトバンドル:

@if (HttpContext.Current.IsDebuggingEnabled) 
    { 
     <script type="text/javascript" src="~/Scripts/require.js" data-main="App/main"></script> 
    } 
    else 
    { 
     <!-- Remember to run the weyland optimizer to create the main-built.js --> 
     @Scripts.Render("~/Scripts/main-built") 
    } 

限り既定のWeb.Release.Configファイルがあるので、Visual Studioは自動的にデバッグ属性を削除し、パブリッシュ時にバンドルを縮小しバージョン管理します。