【问题标题】:I am trying to minifying javascript files using mvc4 bundle feature我正在尝试使用 mvc4 捆绑功能缩小 javascript 文件
【发布时间】:2013-05-09 07:17:58
【问题描述】:

我想捆绑我所有的 JavaScript 文件,所以它应该只访问服务器一次。但是这样我就遇到了一个问题。

bundles.Add(new ScriptBundle("~/LayoutJs").Include(
                "~/Scripts/Libraries/jquery-1.8.2.min.js",
                "~/Scripts/Libraries/kendo/2013.1.319/kendo.all.min.js",
                "~/Scripts/Libraries/jquery.blockUI.js",
                "~/Scripts/Libraries/knockout/knockout-2.1.0.js",
                "~/Scripts/Libraries/knockout/knockout.mapping-latest.js",
                "~/Scripts/Libraries/jquery.unobtrusive-ajax.min.js",
                "~/Scripts/Libraries/tabStrip.js",
                "~/Scripts/Libraries/underscore-min.js",
                "~/Scripts/Libraries/knockout/knockout-kendo.min.js",
                "~/Scripts/Common.js"
                ));

我收到 jquery 未定义但我在包顶部包含 jquery 的错误。

我该如何解决这个问题?

【问题讨论】:

  • 添加 all jQuery JavaScript 文件 之前 Kendo javascript 文件。

标签: javascript asp.net-mvc-4 bundling-and-minification system.web.optimization


【解决方案1】:

我相信这是因为您正在尝试捆绑最小文件。这些文件将被 MVC4 捆绑器忽略。

解决此问题的方法是重命名文件,去掉 .min。或者创建自己的忽略模式(参见链接)。

https://stackoverflow.com/a/12005272/1593273

您还可以升级到已修复此问题的 1.1-alpha1 版本。

ASP.NET Web Optimization

【讨论】:

  • 它们仅在调试模式下被忽略。
【解决方案2】:

请首先确保您已添加如下脚本

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
 "~/Scripts/jquery-1.7.1.min.js",
 "~/Scripts/jquery.validate.min.js",
 "~/Scripts/jquery.validate.unobtrusive.min.js"));

并确保在 BundleConfig 类中定义了上述捆绑包,如下所示:

public class BundleConfig
{
 public static void RegisterBundles(BundleCollection bundles)
 {


bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
 "~/Scripts/jquery-1.7.1.min.js",
 "~/Scripts/jquery.validate.min.js",
 "~/Scripts/jquery.validate.unobtrusive.min.js"));
 }
} 

“*”通配符用于组合在同一目录下且前缀或后缀与其名称相同的文件。假设你想添加所有存在于“~/Script”目录中的脚本文件,并以“jquery”为前缀,那么你可以像下面这样创建包:

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery*.js"));

所有包都在您的 Web 应用程序的 Global.asax 文件的 Application_Start 事件中注册。

protected void Application_Start()
{
 BundleConfig.RegisterBundles(BundleTable.Bundles);
 // code
}

【讨论】:

  • 当使用“BundleTable.EnableOptimizations = true;”实现时然后它工作正常。但是当我尝试使用“BundleTable.EnableOptimizations = false;”的相同代码时,它会产生未定义 jquery 的错误
  • 如果 BundleTable.EnableOptimizations = false;那么有些文件是可以访问的,有些则不是。
  • @PrinceChopra 这是因为调试模式中不包含任何“.min”文件。您要么需要非缩小版本,要么只需重命名缩小版本以删除“.min”。
猜你喜欢
  • 2012-01-29
  • 2013-10-22
  • 2012-06-28
  • 2012-06-27
  • 1970-01-01
  • 2013-09-11
  • 2013-02-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多