【问题标题】:Durandal Caching Issue / Versioning StrategyDurandal 缓存问题/版本控制策略
【发布时间】:2013-04-25 13:50:12
【问题描述】:

对 Durandal js 和 html 文件进行版本控制的好策略是什么?

我注意到,在开发过程中,您的浏览器缓存必须被禁用,这样您才能在每次刷新时接收到最新的文件。这是开发过程中必须的。

但是,我担心的是,当我使用我的持续部署策略(每天部署多次)进入生产环境时,用户的浏览器会缓存我的应用程序的旧版本,这可能会导致不可预知的行为。

想到的方法是以某种方式对 js 和 html url 进行版本控制,以便在每个请求中嵌入一个版本号。但我不确定如何在 Durandal 框架内实现这一点。

【问题讨论】:

    标签: single-page-application durandal


    【解决方案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 程序集的程序集的版本号注入到此属性中,但其代码会分散上述示例的简单性)。

    希望这对某人有所帮助!

    【讨论】:

    • 完美,也是我希望的解决方案类型 :)
    • 这似乎对我不起作用,视图/视图模型仍然拉旧版本。
    • 请求的视图和视图模型是否在其 url 中附加了版本号?
    • 不确定如果您使用 Gulp 等打包 App 文件夹是否可行,因为一开始只有一个请求来获取整个 html/js
    • 没错,这种方法只有在你的 durandal 应用程序设置为在用户浏览时异步下载文件时才有效。许多大型网站上的有效场景。
    【解决方案2】:

    对于 .NET,将 main-built.js 文件添加为 App_Start/BundleConfig 中的脚本包:

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

    在您的索引页面上引用脚本包:

        @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 就会自动删除调试属性,同时还会在发布时对您的包进行压缩和版本控制。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-07
      • 1970-01-01
      • 2012-10-05
      • 2019-04-07
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多