【问题标题】:Loading an MVC JS bundle externally从外部加载 MVC JS 包
【发布时间】:2013-12-13 09:26:00
【问题描述】:

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

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

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

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

如何使捆绑包中的文件作为非缩小捆绑包文件可用?

【问题讨论】:

  • 如果您不想缩小它,那么为什么要通过捆绑器处理它?
  • 是的。只需链接到正常的未缩小文件即可。这就像 HTML 101。
  • 我想在设置 web.config debug=false 属性时缩小它。如果它设置为 true,我不希望它缩小。我不想改变捆绑包的路径来实现这一点。

标签: asp.net-mvc bundling-and-minification system.web.optimization


【解决方案1】:

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

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

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

该路径不关心它是否处于调试状态。这不像/clientApi 将根据您的编译设置捆绑但不缩小文件......它只是您的应用程序 将呈现捆绑/缩小的路径或单个脚本路径。

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

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

【讨论】:

  • 谢谢,几乎涵盖了我希望/想知道的所有小问题。
【解决方案2】:

实际上,如果您禁用捆绑包的转换,您可以提供未缩小的捆绑包

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

【讨论】:

    猜你喜欢
    • 2010-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-16
    • 1970-01-01
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    相关资源
    最近更新 更多