2013-04-25 11 views
16

Qual è una buona strategia per il controllo delle versioni dei file js e html Durandal?Durandal Caching Problema/Strategia di versionamento

Ho notato che, durante lo sviluppo, la cache del browser deve essere disattivata per poter ricevere file aggiornati su ciascun aggiornamento. Questo è un must durante lo sviluppo.

Tuttavia, la mia preoccupazione è che quando vado in produzione con la mia strategia di implementazione continua (distribuzione più volte al giorno), i browser degli utenti inseriranno nella cache versioni precedenti della mia app che potrebbero portare a comportamenti imprevedibili.

L'approccio che viene in mente sarebbe quello di eseguire la versione degli URL js e html in qualche modo in modo che sia incluso un numero di versione in ogni richiesta. Ma non sono sicuro di come fare quel lavoro internamente all'interno della struttura Durandal.

risposta

27

Ok, ecco la direzione in cui mi sto dirigendo. Fondamentalmente c'è qualcosa di incorporato in requirejs per gestirlo.

Nella parte superiore del mio file main.js, nella chiamata a requirejs.config posso impostare una proprietà urlArgs che verrà aggiunta ad ogni chiamata che requirejs crea per un modulo.

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

Quando voglio obbligare gli utenti di produzione per ottenere una nuova versione dei moduli requirejs posso solo incrementare il numero di versione che invalidare la cache del browser.

(Nel mio progetto ho un modo di iniettare il numero di versione dell'assieme contenente il mio assembly MVC ASP.NET principale in questa proprietà, ma il codice per quello avrebbe distolto dalla semplicità dell'esempio precedente).

Spero che questo aiuti qualcuno!

+1

Perfetto, il tipo di soluzione che speravo anche io :) – GONeale

+0

Questo non sembra funzionare per me, views/viewmodels ancora tira su vecchie versioni. – ccorrin

+0

Le viste e i modelli di visualizzazione richiesti hanno il numero di versione aggiunto all'URL? –

3

Per .NET, aggiungere il file principale built.js come un fascio di script in App_Start/BundleConfig:

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

riferimento il bundle di script nella pagina di indice:

@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") 
    } 

Finché dato che si dispone del file Web.Release.Config predefinito, Visual Studio rimuoverà automaticamente gli attributi di debug e al tempo stesso ridimensionerà e eseguirà il controllo delle versioni dei bundle dopo la pubblicazione.