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