2013-04-25 2 views
16

Что такое хорошая стратегия для версий Durandal js и html-файлов?Durandal Caching Issue/Versioning Strategy

Я заметил, что во время разработки ваш кеш браузера должен быть отключен, чтобы вы могли получать обновленные файлы при каждом обновлении. Это необходимо для разработки.

Тем не менее, я обеспокоен тем, что, когда я прихожу к производству с моей стратегией непрерывного развертывания (развертывая несколько раз в день), браузеры пользователей будут кэшировать старые версии моего приложения, что может привести к непредсказуемому поведению.

Подход, который приходит на ум, будет представлять собой версию js и html urls так или иначе, чтобы в каждом запросе был введен номер версии. Но я не уверен, как сделать эту работу внутри Durandal.

ответ

27

Хорошо, вот направление, в которое я направляюсь. В принципе, для этого требуется что-то встроенное в requirejs.

В верхней части моего main.js, в вызове requirejs.config, я могу установить свойство urlArgs, которое будет добавлено к каждому запросу requirejs для модуля.

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, добавьте файл основного built.js в виде пучка сценария в App_Start/BundleConfig:

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

Reference сверток скрипт на вашей странице индекса:

@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 автоматически удалит атрибуты отладки, а также уменьшит и доработает ваши пакеты при публикации.