Combining various virtual paths Bundles into one

I have several Bundles virtual paths defined in BundleConfig.config

, where each has linked multiple javascript path files.

I want to join all these virtual paths in one.

For example, I have the following code:

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.Main).Include(
                                "~/Scripts/EditorV2/main.js"
                    ));

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.Main2).Include(
                                "~/Scripts/EditorV2/main2.js"
                    ));

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.Main3).Include(
                                "~/Scripts/EditorV2/main3.js"
                    ));

      

And I want to be able to do something like this:

bundles.Add(new ScriptBundle(BundlesVirtualPaths.EditorV2.AllScripts).Include(
                            BundlesVirtualPaths.EditorV2.Main,
                            BundlesVirtualPaths.EditorV2.Main2,
                            BundlesVirtualPaths.EditorV2.Main3
                ));

      

It can be done? I can do it?

+3


source to share


2 answers


You can try something like this:

public static class BundleHelpers
{
    public static BundleCollection JoinScriptBundle(this BundleCollection bundleCollection, string virtualPath, params string[] bundlesToJoin)
    {
        var bundleResolver = new BundleResolver(bundleCollection);
        Bundle allScriptBundle = new ScriptBundle(virtualPath);
        foreach (var bundle in bundlesToJoin)
        {
            foreach (var scriptPath in bundleResolver.GetBundleContents(bundle))
            {
                allScriptBundle = allScriptBundle.Include(scriptPath);
            }
        }
        bundleCollection.Add(allScriptBundle);
        return bundleCollection;
    }
}

      



Then you can join your packages:

bundles.JoinScriptBundle("~/bundle/allscript", "~/bundles/jquery", "~/bundles/jqueryval", "~/bundles/modernizr");

      

+4


source


Yes, you can do this because you are trying to combine all files JS

with one bundle

, which is correct, but the same case may not occur every time. so you need to do grouping based on type like this

For directories:

 bundles.Add(new Bundle("~/js/vendor").IncludeDirectory(@"~/Scripts/vendors/JQuery", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors/Knockout", "*.js")
                                                     .IncludeDirectory(@"~/Scripts/vendors", "*.js"));

      

For files:



 bundles.Add(new Bundle("~/js/kendo").Include("~/Scripts/kendo/kendo.core.min.js")
                                        .Include("~/Scripts/kendo/kendo.data.min.js")
                                        .Include("~/Scripts/kendo/kendo.binder.min.js")
                                        .Include("~/Scripts/kendo/kendo.calendar.min.js")

      

For URL:

var CdnPath = "http://fonts.googleapis.com/css?family=Open+Sans:300";
bundles.Add(new ScriptBundle("mybarbundle", CdnPath).Include("~/Scripts/jquery-{version}.js"));

      

+1


source







All Articles