【问题标题】:{version} wildcard in MVC4 BundleMVC4 Bundle 中的 {version} 通配符
【发布时间】:2012-08-15 06:45:29
【问题描述】:

在 MVC 4 中,我们有捆绑包。在定义捆绑包时,我们可以对文件夹中的所有文件使用通配符,例如 *。

在下面的示例中,-{version} 是什么意思?

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

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-optimization


    【解决方案1】:

    -{version} 基本上映射到一个版本regex,或者更准确地说:(\d+(?:\.\d+){1,3})
    使用* 往往会抢占太多,例如,如果你捆绑jquery*,那将包括jquery-ui,这可能会打乱排序。但是使用jquery-{version}.js 可以避免每次升级 jquery 时都必须更新包定义。

    需要注意的其他事项:

    • {version} 仅适用于路径的最后一部分——基本上是文件名——而不是目录。
    • 同一文件夹中的多个版本的 jquery 都会被赶上。

    【讨论】:

    • 文件夹中存在多个版本的 ex: jquery 如何工作?
    • 这是一个正则表达式,因此它会包含所有匹配项,所以如果您在同一个目录中有多个版本,您可能不想使用它。
    • 请注意 {version} 在路径中似乎不起作用。在工作中,我们在路径中有引导版本(不在文件名中),所以我试图这样做:“~/Content/Libraries/bootstrap/{version}/css/bootstrap.css”但是当我运行RegisterBundles,我得到一个 ArgumentException,上面写着“目录不存在。”
    • 投票赞成不在目录中工作。有什么解决方案可以让它在目录中工作?
    • 编辑:没关系,他们在这里清楚地解释了! asp.net/mvc/overview/performance/bundling-and-minification谢谢!
    【解决方案2】:

    此捆绑包能够在脚本名称中容纳版本号。因此,在您的应用程序中(通过 NuGet 或手动)将 jQuery 更新为新版本不需要任何代码/标记更改。

    有关捆绑的更多信息,请参见以下链接:http://weblogs.asp.net/jgalloway/archive/2012/08/16/asp-net-4-5-asp-net-mvc-4-asp-net-web-pages-2-and-visual-studio-2012-web-developer-features.aspx

    【讨论】:

    • 只要你确定旧版本确实被删除了。
    • 当使用 {version} 我收到 Jquery 是未定义的,当我用实际版本替换时,在我的情况下 3.1.1 它工作正常。
    【解决方案3】:

    ~/Scripts/jquery-{version}.js 包含在其中。当我们在路径中指定 {version} 选择器时,这里的捆绑系统足够智能,可以引用 jquery 文件的最高版本。此外,此捆绑系统非常智能,可以选择文件的缩小版本(如果在定义的路径中可用)。

    【讨论】:

      猜你喜欢
      • 2012-10-11
      • 2012-10-03
      • 1970-01-01
      • 2012-03-24
      • 1970-01-01
      • 2019-01-10
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      相关资源
      最近更新 更多