• 扩展asp.net Bundle


    前言

    新建Asp.net  MVC4项目的时候,在Global.asax.cs里面发现多了一句代码

    BundleConfig.RegisterBundles(BundleTable.Bundles)

    google了以后终于弄清楚了这个的作用,发现这个东西确实非常实用,且功能强大,能够压缩合并js和CSS,但是目前的使用起来不是特别好,如果添加js或者css文件的话,需要修改BundleConfig的代码。

    这里我自己简单修改了BundleConfig,对这个进行简单的扩展。

    下面贴出代码:

    先贴配置文件BundleConfig.xml(文件放在网站目录下路径见代码中变量BundleConfigPath)

    <?xml version="1.0" encoding="utf-8" ?>
    <root>
    <Scripts>
    <Script Path="~/bundles/jquery">
    <File>~/Scripts/jquery-{version}.js</File>
    </Script>
    <Script Path="~/bundles/jqueryui">
    <File>~/Scripts/jquery-ui-{version}.js</File>
    </Script>
    <Script Path="~/bundles/jqueryval">
    <File>~/Scripts/jquery.unobtrusive*</File>
    <File>~/Scripts/jquery.validate*</File>
    </Script>
    <Script Path="~/bundles/modernizr">
    <File>~/Scripts/modernizr-*</File>
    </Script>
    <Script Path="~/bb/aa">
    <File>~/Views/Home/addda.js</File>
    </Script>
    </Scripts>
    <Styles>
    <Style Path="~/Content/themes/base/css">
    <File>~/Content/themes/base/jquery.ui.core.css</File>
    <File>~/Content/themes/base/jquery.ui.resizable.css</File>
    <File>~/Content/themes/base/jquery.ui.selectable.css</File>
    <File>~/Content/themes/base/jquery.ui.accordion.css</File>
    <File>~/Content/themes/base/jquery.ui.autocomplete.css</File>
    <File>~/Content/themes/base/jquery.ui.button.css</File>
    <File>~/Content/themes/base/jquery.ui.dialog.css</File>
    <File>~/Content/themes/base/jquery.ui.slider.css</File>
    <File>~/Content/themes/base/jquery.ui.tabs.css</File>
    <File>~/Content/themes/base/jquery.ui.datepicker.css</File>
    <File>~/Content/themes/base/jquery.ui.progressbar.css</File>
    <File>~/Content/themes/base/jquery.ui.theme.css</File>
    </Style>
    <Style Path="~/Content/css">
    <File>~/Content/site.css</File>
    </Style>
    </Styles>
    </root>

    代码文件:BundleConfig.cs

    public class BundleConfig
        {
            public static string BundleConfigPath = "~/Config/BundleConfig.xml";
            /// <summary>
            /// Register Bundles From XML
            /// </summary>
            /// <param name="bundles"></param>
            public static void RegisterBundles(BundleCollection bundles)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(HttpContext.Current.Server.MapPath(BundleConfigPath));
                XmlNode root = doc.DocumentElement;
                // Regester Script
                XmlNodeList ScriptList = root.SelectNodes("Scripts/Script");
                if (ScriptList != null && ScriptList.Count > 0)
                {
                    foreach (XmlNode node in ScriptList)
                    {
                        string path = CheckNodeRegedit(node);
                        if (string.IsNullOrEmpty(path)) continue;
                        var bound = new ScriptBundle(path);
                        List<string> files = GetFilesFormNode(node);
                        if (files.Count > 0)
                        {
                            bound.Include(files.ToArray());
                            bundles.Add(bound);
                        }
                    }
                }
                // Regester Style
                XmlNodeList StyleList = root.SelectNodes("Styles/Style");
                if (StyleList != null && StyleList.Count > 0)
                {
                    foreach (XmlNode node in StyleList)
                    {
                      
                        string path = CheckNodeRegedit(node);
                        if (string.IsNullOrEmpty(path)) continue;
                        var bound = new StyleBundle(path);
                        List<string> files = GetFilesFormNode(node);
                        if (files.Count > 0)
                        {
                            bound.Include(files.ToArray());
                            bundles.Add(bound);
                        }
                    }
                }
                doc = null;
            }
            /// <summary>
            /// 如果内容为空则不添加
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            private static List<string> GetFilesFormNode(XmlNode node)
            {
                List<string> files = new List<string>();
                foreach (XmlNode nodeFile in node.ChildNodes)
                {
                    if (!string.IsNullOrEmpty(nodeFile.InnerText.Trim()))
                        files.Add(nodeFile.InnerText.Trim());
                }
                return files;
            }
            /// <summary>
            /// 检查注册的Node
            /// </summary>
            /// <param name="node"></param>
            /// <returns></returns>
            private static string CheckNodeRegedit(XmlNode node)
            {
                XmlAttribute pathAtt = node.Attributes["Path"];
                string path = string.Empty;
                if (pathAtt == null || string.IsNullOrEmpty(pathAtt.Value.Trim()) || node.ChildNodes.Count == 0)
                    return string.Empty;
                else
                    return pathAtt.Value.Trim();
            }
        }

  • 相关阅读:
    MyBatis学习总结(11)——MyBatis动态Sql语句
    MyBatis学习总结(11)——MyBatis动态Sql语句
    Dubbo学习总结(3)——Dubbo-Admin管理平台和Zookeeper注册中心的搭建
    Dubbo学习总结(1)——Dubbo入门基础与实例讲解
    Dubbo学习总结(1)——Dubbo入门基础与实例讲解
    Maven学习详解(13)——Maven常用命令大全与pom文件讲解
    3分钟了解ServiceStage 应用智能化运维【华为云分享】
    OBS带你玩转图片
    高性能Web动画和渲染原理系列(3)——transform和opacity为什么高性能
    【Python成长之路】Python爬虫 --requests库爬取网站乱码(xe4xb8xb0xe5xa)的解决方法
  • 原文地址:https://www.cnblogs.com/tangruixin/p/2784878.html
Copyright © 2020-2023  润新知