2017-06-26 124 views
3

我在BundleConfig.config上定义了几个虚拟路径,其中每个虚拟路径都关联了多个javascript路径文件。将不同的虚拟路径合并为一个虚拟路径

我想要的是加入所有这些虚拟路径在一个单一的。

举例来说,我有以下代码:

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" 
        )); 

而我要的是客场做这样的事情:

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

这是可以做到?我能做到吗?

回答

4

你可以尝试这样的事情:

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; 
    } 
} 

然后你就可以加入你的包:

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

是的,你可以做到这一点,因为你试图将所有JS文件结合起来,一个bundle这是正确的方法,但可能不会每次都出现相同的情况。所以你需要根据类型做捆绑如下

对于目录:

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

对于文件:

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") 

对于网址:

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

你不明白我的问题。我想要的是,给定几个虚拟路径(每个虚拟路径都有几个脚本路径分开),我想将它们和所有文件关联到一个新的虚拟路径,这样我就可以节省时间将所有脚本路径合并到一个新的虚拟路径中 –