我目前正在使用MVC 4,我遇到了捆绑的限制,我希望有人可以帮助我。我想要包括CDN交付的资产以及捆绑中的本地脚本。问题是,RegisterBundles(BundleCollection bundles)
是一个静态方法,它接受一个静态对象作为参数。一旦我将useCDN
和enableOptimizations
设置为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
课程?框架是否可以扩展为允许这样而不是静态方法?
答案 0 :(得分:2)
enableOptimizations
明确允许在开发中进行捆绑和缩小。如果这不是您想要的,请将其关闭。