with framework fire fate espada emblem dxd development bomb single-page-application durandal

single-page-application - framework - durandal fate



Durandal Caching Issue/Versioning Strategy (2)

Ok, aquí está la dirección en la que me dirijo. Básicamente, hay algo incorporado en requirejs para manejar esto.

En la parte superior de mi main.js, en la llamada a requirejs.config puedo configurar una propiedad urlArgs que se agregará a cada llamada que requirejs realice para un módulo.

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

Cuando quiero forzar a los usuarios de producción a obtener una nueva versión de los módulos requeridos, solo puedo incrementar el número de versión, lo que invalidará la memoria caché de los navegadores.

(En mi proyecto, tengo una forma de inyectar el número de versión del ensamblaje que contiene mi ensamblaje MVC ASP.NET principal en esta propiedad, pero el código para eso se habría distraído de la simplicidad del ejemplo anterior).

¡Espero que esto ayude a alguien!

¿Cuál es una buena estrategia para la versión de archivos Durandal js y html?

Noté que, durante el desarrollo, la memoria caché de su navegador debe estar deshabilitada para que pueda recibir archivos actualizados en cada actualización. Esta es una necesidad para durante el desarrollo.

Sin embargo, mi preocupación es que cuando comience la producción con mi estrategia de implementación continua (implementando varias veces al día), los navegadores de los usuarios almacenarán en caché las versiones anteriores de mi aplicación, lo que podría llevar a un comportamiento impredecible.

El enfoque que viene a la mente sería la versión de las direcciones URL de js y html de modo que haya un número de versión incorporado en cada solicitud. Pero no estoy seguro de cómo hacer que eso funcione internamente dentro del marco de Durandal.


Para .NET, agregue el archivo main-built.js como un paquete de scripts en App_Start / BundleConfig:

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

Haga referencia al paquete de scripts en su página de índice:

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

Mientras tenga el archivo Web.Release.Config predeterminado, Visual Studio eliminará automáticamente los atributos de depuración al mismo tiempo que minimiza y versiona sus paquetes al publicar.