【问题标题】:Added Bundling and Minification... When I look at the source, it still looks like it's not bundlnig and minifying添加了捆绑和缩小...当我查看源代码时,它看起来仍然不像捆绑和缩小
【发布时间】:2015-03-25 18:30:27
【问题描述】:

我将捆绑添加到我的 MVC 3 应用程序中。 我下载了 Microsoft.Web.Optiminization.1.1.3 的 nugetpackage 我将此添加到我的 Globals.asax

public static void RegisterBundles(BundleCollection bundles)
    {

        BundleTable.EnableOptimizations = true;
        //CSS  
        var styles = new StyleBundle("~/Bundling/bundledcss").Include(
                                                                         "~/Content/site.css",
                                                                         "~/Content/ASPNetSpellInclude/themes/bright/*.css",
                                                                         "~/Content/ASPNetSpellInclude/themes/buttons/*.css",
                                                                         "~/Content/ASPNetSpellInclude/themes/classic/*.css",
                                                                         "~/Assets/CSS/*.css",
                                                                         "~/Assets/CSS/blue/*.css",
                                                                         "~/Assets/CSS/cupertino/*.css",
                                                                         "~/Assets/JQGrid/css/cupertino/*.css"
                                                                     );
        INetLog log = ObjectFactory.GetInstance<INetLog>();
        log.Debug("done mini and budle css");
        //JS  
        var js = new ScriptBundle("~/Bundling/bundledjs").Include(
                                                                    "~/Scripts/*.js",
                                                                    "~/Content/*.js",
                                                                    "~/Content/ASPNetSpellInclude/*.js",
                                                                    "~/Content/ASPNetSpellInclude/core/*.js",
                                                                    "~/Content/ASPNetSpellInclude/debugging-test-scripts/*.js",
                                                                    "~/Content/ASPNetSpellInclude/translations/*.js",
                                                                    "~/Content/ASPNetSpellInclude/*.js",
                                                                    "~/Assets/JavaScript/*.js",
                                                                    "~/Assets/JavaScript/i18n/*.js",
                                                                    "~/Assets/JQGrid/js/*.js",
                                                                    "~/Assets/JQGrid/js/i18n/*.js"
                                                                 );

        log.Debug("done minify and bundle script");
        bundles.Add(styles);
        bundles.Add(js);
        BundleTable.EnableOptimizations = true;
        log.Debug("done generating bundles");
    }

从 Application_Start 调用

protected void Application_Start
{
     <snip>                
     RegisterBundles(BundleTable.Bundles);
}

在我的根布局页面上,我有这些

        <link rel="stylesheet" type="text/css" href="@Styles.Url("~/Assets/CSS/Jcdc.css")" />
<script type="text/javascript" src="@Scripts.Url( "~/Assets/JavaScript/jquery-1.4.2.min.js")"></script>

我的 web.config 有 debug = false

<compilation debug="false" targetFramework="4.0">

但是当我在页面上运行并查看源代码时......我仍然看到这个。

<link rel="stylesheet" type="text/css" href="/CIS3G/Assets/CSS/Jcdc.css" />
  ...
 <script type="text/javascript" src="/CIS3G/Assets/JavaScript/jquery-1.4.2.min.js"></script> 

这意味着缩小和捆绑不起作用,对吧?

这篇文章

http://www.dotnet-tricks.com/Tutorial/mvc/c72b040113-Asp.net-MVC-4-performance-optimization-with-bundling-and-minification.html

显示我应该期待

所以它显然不起作用......

有人看到我错过了什么,我读过的所有内容都告诉我它应该可以工作吗?

【问题讨论】:

  • 你错过了那篇文章的一部分:例如@Styles.Render("~/bundling/bundledcss")

标签: c# bundling-and-minification system.web.optimization


【解决方案1】:

您的根布局中的代码似乎是错误的。您仍在直接添加对您的 js 和 css 的引用。

您需要在根布局文件的 head 标签中添加这两行。

<head>
    @Scripts.Render("~/Bundling/bundledjs")
    @Styles.Render("~/Bundling/bundledcss")
</head>

【讨论】:

  • 我需要能够在不同的布局页面中以不同的顺序添加它们(我知道,不是我的决定)所以我必须一次添加它们,而不是一次添加它们......布局中的代码应该这样做。我可能会为每个人单独打包并这样做,但我试图避免它。见 Scripts.Url 方法的描述msdn.microsoft.com/en-us/library/…
  • 如果您需要捆绑包的功能,即带有版本标记的 URL,您需要根据需要拆分捆绑包。并且正如描述中提到的,如果你直接指向Url,它不会在Url上返回版本标记。确切的原因,为什么你看不到版本戳。您没有指向虚拟包路径。
  • 我明白了,我第一次阅读时误解了它。我可以在一个布局中添加多个捆绑包吗? @Scripts.Render("~/Bundling/bundledjs") 和 @Scripts.Render("~/Bundling/othersmallerbundledjs") ?
  • 是的,你可以。您甚至可以将其添加到页面的头部和主体等不同部分,以控制其加载顺序。
  • 我在阅读有关订购的信息时感到困惑。有一个地方说,如果你通过通配符添加它们,它们是 alpha 排序的(顶部有一些冒泡),但如果你添加它们一个有时它们按照您添加它们的顺序(我更喜欢)其他文章说它是 alpha 顺序(一旦一些常见的库冒泡到顶部)所以我需要一个自定义的 IBundleOrderer ..这是如果您按顺序将文件一次添加到包中,则为 true。
【解决方案2】:

你启用优化了吗,参考:https://msdn.microsoft.com/en-us/library/system.web.optimization.scripts.render(v=vs.110).aspx

要启用捆绑和缩小,请将调试值设置为“false”。您可以使用 BundleTable 类的 EnableOptimizations 属性覆盖 Web.config 设置。以下代码启用捆绑和缩小并覆盖 Web.config 文件中的任何设置。

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
             "~/Scripts/jquery-{version}.js"));

    // Code removed for clarity.
    BundleTable.EnableOptimizations = true;
}

注意: 除非EnableOptimizations 为true 或Web.config 文件中的compile Element 中的debug 属性设置为false,否则不会捆绑或缩小文件。此外,不会使用 .min 版本的文件,将选择完整的调试版本。 EnableOptimizations 覆盖 Web.config 文件中编译元素中的调试属性。

【讨论】:

  • BundleTable.EnableOptimizations = true;设置在上面第一个函数RegisterBundles的顶部和底部
猜你喜欢
  • 2017-12-13
  • 2014-11-26
  • 2013-06-27
  • 2012-06-28
  • 1970-01-01
  • 2017-09-19
  • 2018-05-11
  • 2016-08-28
  • 2014-09-29
相关资源
最近更新 更多