Durandal Caching Issue/Versioning Strategy
Какая хорошая стратегия для версий Durandal js и html файлов?
Я заметил, что во время разработки кеш браузера должен быть отключен, чтобы вы могли получать обновленные файлы при каждом обновлении. Это необходимо для разработки.
Тем не менее, я обеспокоен тем, что, когда я перехожу к своей стратегии непрерывного развертывания (развертывая несколько раз в день), браузеры пользователей будут кэшировать старые версии моего приложения, что может привести к непредсказуемому поведению.
Подход, который приходит на ум, заключается в том, чтобы каким-то образом изменить URL-адреса js и html, чтобы в каждом запросе был добавлен номер версии. Но я не уверен, как сделать эту работу внутренне в рамках Дюрандала.
Ответы
Ответ 1
Хорошо, вот направление, в которое я направляюсь. В принципе, в requirejs есть что-то, что можно было бы обработать.
В верхней части моего main.js, в вызове requirejs.config, я могу установить свойство urlArgs, которое будет добавлено к каждому запросу requirejs для модуля.
requirejs.config({
paths: {
'text': 'durandal/amd/text'
},
urlArgs: 'v=1.0.0.0'
});
Когда я хочу заставить пользователей производства получить новую версию модулей requirejs, я могу просто увеличить номер версии, которая приведет к аннулированию кеша браузеров.
(В моем проекте у меня есть способ ввести номер версии сборки, содержащей мою основную сборку ASP.NET MVC, в это свойство, но код для этого отвлекся от простоты приведенного выше примера).
Надеюсь, это поможет кому-то!
Ответ 2
Для .NET добавьте файл main-built.js в виде пакета script в App_Start/BundleConfig:
public static void RegisterBundles(BundleCollection bundles)
{
//...
bundles.Add(new ScriptBundle("~/Scripts/main-built").Include(
"~/App/main-built.js"));
//...
}
Ссылка на пакет script на вашей индексной странице:
@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 автоматически удалит атрибуты отладки, а также опубликовывает и удаляет ваши пакеты при публикации.