zoukankan      html  css  js  c++  java
  • 扩展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();
            }
        }

  • 相关阅读:
    windows server2016设置关闭自动更新
    ubuntu20/mac 安装php8.0
    Linux / Python 打印花式字符串
    Linux 增加 DNS 域名解析服务器
    挺不错的一个开源国产上线部署平台:walle
    Python 定时任务实现只执行一次的方法
    JavaScript 正则入门
    grid布局详解
    flex布局详解
    CSS3 入门指南(二)
  • 原文地址:https://www.cnblogs.com/tangruixin/p/2784878.html
Copyright © 2011-2022 走看看