asp.NetBundle機能拡張

5805 ワード

前言
新しいAsp.NetMVC 4プロジェクトの時、Global.asax.csにはコードが1つ増えています
BundleConfig.RegisterBundles(BundleTable.Bundles)
Googleはその後やっとこの役割を明らかにし、これは確かに非常に実用的で、機能が強く、jsとCSSを圧縮合併することができますが、現在の使用は特によくありません.jsやcssファイルを追加すると、BundleConfigのコードを修正する必要があります.
ここでは自分でBundleConfigを簡単に修正し、これを簡単に拡張しました.
次のコードを貼ります.
プロファイルを貼り付けるxml(ファイルをWebサイトのディレクトリの下に置くパスはコードの変数BundleConfigPathを参照)
 
  



<br><File>~/Scripts/jquery-{version}.js</File> <br>
<br><File>~/Scripts/jquery-ui-{version}.js</File> <br>
<br><File>~/Scripts/jquery.unobtrusive*</File> <br><File>~/Scripts/jquery.validate*</File> <br>
<br><File>~/Scripts/modernizr-*</File> <br>
<br><File>~/Views/Home/addda.js</File> <br>







コードファイル:BundleConfig.cs
 
  
public class BundleConfig
{
public static string BundleConfigPath = "~/Config/BundleConfig.xml";
///
/// Register Bundles From XML
///

///
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 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 files = GetFilesFormNode(node);
if (files.Count > 0)
{
bound.Include(files.ToArray());
bundles.Add(bound);
}
}
}
doc = null;
}
///
///
///

///
///
private static List GetFilesFormNode(XmlNode node)
{
List files = new List();
foreach (XmlNode nodeFile in node.ChildNodes)
{
if (!string.IsNullOrEmpty(nodeFile.InnerText.Trim()))
files.Add(nodeFile.InnerText.Trim());
}
return files;
}
///
/// Node
///

///
///
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();
}
}