为什么不捆绑MVC 4捆绑Knockout.js?

时间:2012-05-14 08:47:55

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

我已经下载了MVC4并试图弄清楚捆绑功能在标准项目中的工作原理。似乎有捆绑:

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script>

返回所有jquery.js文件,但不包含所包含脚本中的knockout.js文件。为什么是这样?还有什么是_references.js文件,为什么knockout.js文件被注释掉了?

3 个答案:

答案 0 :(得分:8)

如果您查看项目Global.asax文件,您应该找到类似的内容:

protected void Application_Start()
{
    ...
    BundleTable.Bundles.RegisterTemplateBundles();
}

现在RegisterTemplateBundles只注册预定义的脚本子集:

  • 的jquery - *
  • jquery.mobile *
  • jQuery的UI *
  • jquery.unobtrusive *
  • jquery.validate *
  • MicrosoftAjax.js
  • MicrosoftMvc.js
  • Modernizr的*
  • AjaxLogin.js

如果您想要其他一些文件,可以将RegisterTemplateBundles更改为EnableDefaultBundles

protected void Application_Start()
{
    ...
    BundleTable.Bundles.EnableDefaultBundles();
}

或者创建自己的自定义捆绑包(您可以阅读有关捆绑和缩小here的更多信息)。您还应该知道EnableDefaultBundles会对性能产生影响。

Visual Studio for JavaScript intellisense使用_references.js文件。您可以从以下文章中了解更多信息:

答案 1 :(得分:2)

tpeczek是正确的。大多数人不使用Knockout.js,这就是默认情况下不包含它的原因。对于RC来说,捆绑/缩小(BM)已经发生了很大变化,将文件添加到捆绑包中会更加简单。查看我的Bundling and Minification tutorial

答案 2 :(得分:0)

我能够在文件夹中添加一个文件,并在RegisterTemplateBundles()之后添加以下代码行

BundleTable.Bundles.RegisterTemplateBundles();
BundleTable.Bundles.Where(x => x.Path == "~/Scripts/js").First().AddFile("~/scripts/knockout-2.0.0.js");