【问题标题】:Bundle Loading Scripts in wrong order以错误的顺序捆绑加载脚本
【发布时间】:2018-05-14 19:14:12
【问题描述】:

我从 jQuery 验证中得到一个 jQuery is not defined error 在 jquery 之前加载。

我不确定这是否与使用 ASP.net Boilerplate 有关,但在捆绑配置中我有以下内容:

 bundles.Add(
            new ScriptBundle("~/Bundles/vendor/js/bottom")
                .Include(
                    "~/lib/json2/json2.js",
                    "~/lib/jquery/dist/jquery.min.js",
                    "~/lib/bootstrap/dist/js/bootstrap.min.js",
                    "~/lib/moment/min/moment-with-locales.min.js",
                    "~/lib/jquery-validation/dist/jquery.validate.min.js",
                    "~/lib/blockUI/jquery.blockUI.js",
                    "~/lib/toastr/toastr.min.js",
                    "~/lib/sweetalert/dist/sweetalert.min.js",
                    "~/lib/spin.js/spin.min.js",
                    "~/lib/spin.js/jquery.spin.js",
                    "~/lib/bootstrap-select/dist/js/bootstrap-select.min.js",
                    "~/lib/jquery-slimscroll/jquery.slimscroll.min.js",
                    "~/lib/Waves/dist/waves.min.js",
                    "~/lib/push.js/push.min.js",
                    "~/Abp/Framework/scripts/abp.js",
                    "~/Abp/Framework/scripts/libs/abp.jquery.js",
                    "~/Abp/Framework/scripts/libs/abp.toastr.js",
                    "~/Abp/Framework/scripts/libs/abp.blockUI.js",
                    "~/Abp/Framework/scripts/libs/abp.spin.js",
                    "~/Abp/Framework/scripts/libs/abp.sweet-alert.js",
                    "~/lib/flatpickr/dist/flatpickr.min.js",
                    "~/js/admin.js",
                    "~/js/main.js",
                    "~/Scripts/jquery.signalR-2.2.3.js",
                    "~/Views/Shared/_Layout.js"
                )
            );

所以我使用的是缩小版的 jQuery 和缩小版的 jQuery.Validate。当我使用 jQuery 的缩小版本并加载页面时,jquery.validate.min.js 是第一个加载的脚本,并且正如预期的那样,它会抛出 jQuery is not defined. error. 虽然只要我不使用 jQuery (jquery.js) 的缩小版本,脚本就会以正确的顺序加载。

ASP.NET Boilerplate 是否使用我不知道的捆绑包中的任何自定义文件排序?我确实相信 MVC,但可能是错误的,它会首先在包中处理显式命名的脚本,然后是符号命名的脚本。虽然这些都是明确命名的脚本。

有什么我遗漏的东西或者我可以如何解决这个问题的一些解决方案吗?

【问题讨论】:

  • 不确定,为什么您会收到订单问题...但还有其他需要验证的地方 - 所有 JS 库都更新了吗?您可以通过 NuGet 包管理器更新它们,您将在那里看到版本。可能是版本不匹配,值得检查。
  • 使用IBundleOrderermsdn.microsoft.com/en-us/library/…,这将确保文件按顺序添加。同样在这个答案中:stackoverflow.com/a/11995916/4851351
  • @st_stefanov 我检查了 NuGet 包管理器更新,唯一的一个是引导程序,因为我没有在这个项目上移动到引导程序 4。 jQuery Validate 和 jQuery 都是最新版本。
  • @poolpro 添加我自己的IBundleOrderer,它刚刚返回了列表,似乎可行。虽然我觉得它应该是必要的,因为如果我没记错的话,默认的捆绑排序器不会在 jQuery 验证之前提升 jQuery 吗?以及为什么当我使用 jquery 的缩小版时它只在 jQuery 之前推广 jQuery Validate。
  • 不需要使用缩小版。 bundles 的特点之一是它们在生产中自动缩小文件,但在调试中使用非缩小版本

标签: asp.net-mvc aspnetboilerplate


【解决方案1】:

我最终使用了这里的答案:https://stackoverflow.com/a/11981271/4201348

我几乎定义了我自己的名为AsIsBundleOrder 的BundleOrderer,它实现了IBundleOrderer,它只是按原样返回文件,并将其设置为要在BundleConfig 中使用的排序器。

这行得通,虽然仍然没有给我一个完整的答案,为什么(我认为的重要原因)默认排序器仅在我使用 jQuery 的缩小版本时才将 jQuery validate 提升为在 jQuery 之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-20
    • 2017-08-16
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多