从外部加载MVC JSbundle



我的MVC 5项目中有一个小型JS库,我希望外部用户可以将其加载到他们的应用程序中。目前我是这样捆绑的:

bundles.Add(new ScriptBundle("~/clientApi")
    .IncludeDirectory("~/Api/clientapps/", "*.js"));

然后,我可以通过浏览器访问路径为/clientApi的绑定库。

然而,它总是被缩小的,即使我已经将web.config debug=true设置为true,并且我自己的应用程序中的其他捆绑包也被包含为非缩小的。

如何使捆绑包中的文件成为非缩小捆绑包文件?

如果您直接访问/clientApi,那么是的,它将是捆绑/缩小版本。

debug=true选项会影响您自己的.cshtml文件中的脚本引用。当使用debug=true时,对单个脚本文件的引用将呈现给客户端(因此客户端根本不使用/clientApi)。

debug=false时,对/clientApi的引用(带有版本查询字符串)会被呈现给客户端,因此他们会获得捆绑/缩小的版本。。。如果您将该链接提供给这些外部用户,那么将呈现该链接。

该路径不在乎是否调试。/clientApi不会根据您的编译设置捆绑但不缩小文件。。。这只是你的应用程序将呈现捆绑/缩小的路径或单独的脚本路径。

如果你想在外部应用程序中进行调试/测试,那么他们只需要使用单独的脚本路径。

即使在测试完成后,您确实为这些外部应用程序提供了/clientApi参考,并且它们已经准备好使用捆绑/缩小版本,但这并不能解释您将如何处理版本控制。如果你更新了一个脚本,他们怎么会知道停止缓存?

实际上,如果您禁用Bundles 的转换,您可以提供未优化的bundle

protected void Application_Start() {
    BundleTable.EnableOptimizations = true; // Force bundling to occur
    // If the compilation node in web.config indicates debugging mode is enabled
    // then clear all transforms. I.e. disable Js and CSS minification.
    if (HttpContext.Current.IsDebuggingEnabled) {
        BundleTable.Bundles.ToList().ForEach(b => b.Transforms.Clear());
    }
}

最新更新