16

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

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

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

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

4

2 回答 2

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

希望这对某人有帮助!

于 2013-04-29T14:47:53.927 回答
3

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

于 2013-08-23T18:03:43.487 回答