ASP.NET MVC 4 allows you to bundle multiple JavaScript or CSS files into a single "bundled" download, and optionally minify the bundle to reduce the download size. John Petersen has a good introduction to the feature.
I've been experimenting with an approach that lets me use the following code during application startup.
BundleTable.Bundles.Add(new RGraphBundle());
The RGraphBundle class lists all the JavaScript files needed for a certain feature, and sets the virtual path to reach the bundle.
public class RGraphBundle : JsBundle { public RGraphBundle() : base("~/Rgraph") { AddFiles( "~/Scripts/Rgraph/RGraph.common.core.js", "~/Scripts/Rgraph/RGraph.common.context.js", "~/Scripts/Rgraph/RGraph.common.zoom.js", "~/Scripts/Rgraph/RGraph.common.effects.js", "~/Scripts/Rgraph/RGraph.line.js" ); } }
Everything else is taken care of by base classes.
public class CustomBundle : Bundle { public CustomBundle(string virtualPath) : base(virtualPath) { } public void AddFiles(params string[] files) { foreach (var file in files) { AddFile(file); } } public void SetTransform<T>() where T: IBundleTransform { if(HttpContext.Current.IsDebuggingEnabled) { Transform = new NoTransform(); } else { Transform = Activator.CreateInstance<T>(); } } } public class JsBundle : CustomBundle { public JsBundle(string virtualPath) : base(virtualPath) { SetTransform<JsMinify>(); } } public class CssBundle : CustomBundle { public CssBundle(string virtualPath) : base(virtualPath) { SetTransform<CssMinify>(); } }
Checking the IsDebuggingEnabled flag lets me turn minification on and off by toggling the debug setting in web.config, just like the ScriptManager would do in that other ASP.NET web framework.
OdeToCode by K. Scott Allen