2
  • 如果 RequireJS 将多个 js 文件合并到一个 main.js 文件中,它本质上是否与 ASP.NET 的脚本捆绑功能相同?
  • 除了捆绑之外,使用 RequireJS 的唯一好处是能够根据 RequireJS 配置加载某些脚本吗?

我对捆绑和 RequireJS 都很陌生,但是在阅读了一些内容之后,似乎捆绑处理了加载多个 js 文件的多个请求。关于将 RequireJS 与捆绑一起使用,我可能会遗漏任何其他事情吗?

4

2 回答 2

2

如果你打算使用 MVC 4,我建议你使用 Bundles。

使用捆绑包,您可以定义将在浏览器上呈现的脚本集,具体取决于您是在调试还是在生产环境中。

为了检测您是否处于调试状态,您必须更改 web.config 文件中的以下设置

<compilation debug="true">
  • 如果您正在调试,Bundle 引擎会将所有脚本呈现为单独的标签。

  • 如果你不调试,Bundle 引擎将只渲染一个标签,并且当前 bundle 引用的所有脚本都将合并到一个单独的 JS 文件中

捆绑包也使用约定来检测应该呈现的脚本文件

简单示例

例如,在 JQuery 的情况下

JQuery 脚本文件如下所示:

  • jquery-1.8.2.js

  • jquery-1.8.2.min.js

当你声明你的包时,你这样做:

        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                    "~/Scripts/jquery-{version}.js"));

请注意,您没有指定版本或文件名的.min部分,这是因为这些是捆绑引擎在选择正确文件时会考虑的特殊标记

每当您使用指定的路径引用您的包时,包引擎将处理它们,并选择正确的脚本文件,例如:

  • 如果调试,会渲染jquery-1.8.2.js文件

  • 如果不调试,jquery-1.8.2.min.js将被渲染

在此示例中,捆绑包名为:~/bundles/jquery,您将在页面上引用如下:

@Scripts.Render("~/bundles/jquery")

如果捆绑包有更多脚本,则相同的规则适用于所有脚本。

复杂的例子

考虑这个捆绑注册

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.unobtrusive*",
            "~/Scripts/jquery.validate*"));
  • 如果调试,这将是呈现的 HTML

    <script src="/Scripts/jquery.unobtrusive-ajax.js"></script>
    <script src="/Scripts/jquery.validate.js"></script>
    <script src="/Scripts/jquery.validate.unobtrusive.js"></script>
    
  • 如果不调试,这将呈现:

    <script src="/bundles/jqueryval?v=6Fqs6ZHMM_nFyDgv5mxz89PzsVLAnRNKOhqrK-mI5yU1"></script>
    

    该链接将包含所有合并的脚本文件,从而使页面加载速度更快,因为浏览器只需单击一下即可下载所有脚本

有关详细信息,请参阅 ASP.NET 4.5 新功能

于 2012-10-25T19:42:11.597 回答
2

RequireJS 是合适的,有些人可能会说对于实现 JavaScript 繁重 UI 的项目是必要的。

  1. 首先,RequireJS 的工作方式与 Asp.net MVC 捆绑不同。默认情况下,脚本会继续单独加载。通过捆绑,您可以控制脚本在 MVC 中的组合方式。使用 RequireJS,您可以编写每个单独的代码模块,使其可以声明为另一个模块中的依赖项,也可以声明它自己的依赖项。本质上,您最终会在 JS 中处理所有 JS 结构。
  2. RequireJS 提供的不仅仅是捆绑机制。如果您使用 JavaScript 构建 UI,那么使用 RequireJS 会更好。如果您只需要几个 jQuery 小部件,Asp.net MVC 捆绑将是最简单的设置。

多个请求并不总是一件坏事。最重要的是,您选择的解决方案会随着项目的增长而扩展。

于 2012-10-26T16:58:06.143 回答