【问题标题】:Why doesnt the MVC4 bundling bundle Knockout.js?为什么 MVC 4 捆绑包不捆绑 Knockout.js?
【发布时间】:2012-05-14 08:47:54
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    如果您查看您的项目 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 对性能有一些影响。

    _references.js 文件由 Visual Studio 用于 JavaScript 智能感知。您可以从以下文章中了解更多信息:

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        我能够通过在 RegisterTemplateBundles() 之后添加以下代码行将文件添加到包中

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-04-20
          • 2021-11-16
          • 2017-03-25
          • 1970-01-01
          • 1970-01-01
          • 2012-10-28
          • 1970-01-01
          相关资源
          最近更新 更多