MVC4捆绑包中的{version}通配符


155

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

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

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

Answers:


177

-{version}基本映射到一个版本的正则表达式,或者更确切地说:(\d+(?:\.\d+){1,3})
使用可能*会引起太多争夺,例如,如果您捆绑jquery*,那么这也会包括在内jquery-ui,这可能会扰乱排序。但是使用jquery-{version}.js可以避免每次升级jquery时都必须更新包定义。

其他注意事项:

  • {version} 仅适用于路径的最后一部分(基本上是文件名),不适用于目录。
  • 同一文件夹中的多个版本的jquery都将被捕获。

2
文件夹中存在的多个ex:jquery版本将如何工作?
pavsaund 2013年

18
这是一个正则表达式,因此将包括所有匹配项,因此,如果您在同一目录中有多个版本,则可能不希望使用此版本。
浩宫2013年

3
请注意,{version}似乎在路径内不起作用。在工作中,我们在路径中(而不是在文件名中)具有引导程序版本,因此我正在尝试执行以下操作:“〜/ Content / Libraries / bootstrap / {version} /css/bootstrap.css”但是当我运行时RegisterBundles,我收到一个ArgumentException,内容为“目录不存在”。
迈克尔·纳尔逊

4
投票反对不在目录中工作。任何解决方案,使其在目录中工作?
Zapnologica

3
编辑:没关系,他们在这里清楚地解释了!asp.net/mvc/overview/performance/bundle-and-minification 谢谢!
乔恩·科特

12

该捆绑软件可以容纳脚本名称中的版本号。因此,将jQuery更新到应用程序中的新版本(通过NuGet或手动)不需要任何代码/标记更改。

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


3
只要确保确实删除了旧版本即可。
Triynko 2015年

当使用{version}时,我收到的Jquery是未定义的,当我替换为实际版本时(在我的情况下为3.1.1),它可以正常工作。
Marc Roussel

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.