MVC捆绑包用于远程CDN和本地文件

时间:2013-12-27 20:43:19

标签: c# asp.net-mvc asp.net-mvc-4

我目前正在使用MVC 4,我遇到了捆绑的限制,我希望有人可以帮助我。我想要包括CDN交付的资产以及捆绑中的本地脚本。问题是,RegisterBundles(BundleCollection bundles)是一个静态方法,它接受一个静态对象作为参数。一旦我将useCDNenableOptimizations设置为true,我就无法调试并逐步执行我的本地javascript,因为它会缩小。以下是我到目前为止的情况:

public class BundleConfig
{

    public static void RegisterBundles(BundleCollection bundles)
    {
        // allow URLs in bundle declaration
        BundleTable.EnableOptimizations = true;
        bundles.UseCdn = true;

        string asset1= "/assets/javascript/framework/asset1/asset1.min.js";
        bundles.Add(new ScriptBundle("~/asset1", assembleBundleURL(asset1)));

        string asset2= "/assets/javascript/framework/asset2/asset2.mobile-1.3.1.min.js";
        bundles.Add(new ScriptBundle("~/asset2", assembleBundleURL(asset2)));

        bundles.Add(new ScriptBundle("~/bundles/myApp").Include(
            "~/Scripts/myApp/myApp1.js",
            "~/Scripts/myApp/myApp2.js",
            "~/Scripts/myApp/myApp3.js",
            "~/Scripts/myApp/myApp4.js"));
    }

    internal static string assembleBundleURL(string asset)
    {
        if (ConfigurationManager.AppSettings["externalWebAssetsHost"] == null)
            throw new Exception("externalWebAssetsHost url is required in web.config");

        string host = ConfigurationManager.AppSettings["externalWebAssetsHost"].ToString();
        string protocol = "https://";
        return protocol + host + asset;
    }

}

我想在这里通过捆绑包含CDN网址,因为它允许我使用web.config转换为我的不同环境指定不同的URL。否则我只是在HTML中专门包含CDN网址并完成它。我想要包含的CDN资产是用于常见功能的其他内部JavaScript库,我不希望在本地包含这些内部资产,因为它可能成为版本问题。

有没有办法让两个RegisterBundles方法写入两个单独的BundleTables? 或者有没有办法让捆绑实例驱动而不是静态,这样对于每个不同来源的捆绑(cdn或local),你可以在BundleTable类上拥有不同的属性?最后,我希望能够在调试模式下本地运行我的应用程序,并能够单步执行本地文件的javascript,但仍然从CDN中提取缩小的引用。

修改

如果我将EnableOptimizations设置为false并从资产文件名中删除“min”,则捆绑包仍然不会在DEBUG模式下呈现给HTML。如果EnableOptimizations为真,似乎UseCdn必须为真。

更新

我理解为什么上面的代码不允许我在调试模式下进入我的javascript。我的问题是:有没有办法让一个以上的BundleTable课程?框架是否可以扩展为允许这样而不是静态方法?

1 个答案:

答案 0 :(得分:2)

enableOptimizations明确允许在开发中进行捆绑和缩小。如果这不是您想要的,请将其关闭。