3

我在 BundleConfig.cs 中定义了以下 ScriptBundle-

    public class BundleConfig
    {
        public static void RegisterBundles(BundleCollection bundles)
        {
          bundles.Add(new ScriptBundle("~/js/yepnope").Include(
                "~/Scripts/yepnope.{version}.js"));
       }
    }

它实际上并不是唯一的捆绑包,但这就是与问题相关的全部内容 - 其余的只是其他捆绑包定义。

当处于 web.config 中设置的“调试”模式时-

<compilation debug="true" targetFramework="4.5">

脚本的完整版本和缩小版本都发送到浏览器 -

<script src="/Scripts/yepnope.1.5.4-min.js"></script>
<script src="/Scripts/yepnope.1.5.4.js"></script>

该脚本是使用 HTML 助手添加的,如下所示 -

@section HeadScripts
{
    @Scripts.Render("~/js/yepnope")
}

这是在 Windows 7 Professional 64 位的 Visual Studio 2012 中运行的 MVC4 项目。

无论我做什么,我都无法让 {version} 通配符按照Microsoft 文档中的描述运行-

注意:除非 EnableOptimizations 为 true 或 Web.config 文件中的编译元素中的 debug 属性设置为 false,否则不会捆绑或缩小文件。此外,不会使用 .min 版本的文件, 将选择完整的调试版本

对于 ASP.NET MVC 4,这意味着使用调试配置,文件 jquery-1.7.1.js 将被添加到包中。在发布配置中,将添加 jquery-1.7.1.min.js。捆绑框架遵循几个常见的约定,例如:

  • 当“FileX.min.js”和“FileX.js”存在时选择“.min”文件发布
  • 选择非“.min”版本进行调试
  • 忽略仅由 IntelliSense 使用的“-vsdoc”文件(例如 jquery-1.7.1-vsdoc.js)。

上面显示的 {version} 通配符匹配用于在您的 Scripts 文件夹中使用适当版本的 jQuery 自动创建 jQuery 包。在此示例中,使用通配符可带来以下好处:

  • 允许您使用 NuGet 更新到较新的 jQuery 版本,而无需更改前面的捆绑代码或视图页面中的 jQuery 引用。
  • 自动为调试配置选择完整版本,为发布版本选择“.min”版本。

如果我添加“EnableOptimizations”,它的行为似乎符合预期。

有没有其他人注意到这一点或找到解决方案?

4

1 回答 1

5

MVC4 只知道如何处理.min.js文件。它无法识别-min.js(带有破折号)。

我通常很容易成功地做到这一点的方法是摆脱由提供 a和 a or的库提供的任何.min.jsor文件。默认情况下,MVC 会在您部署网站时自动缩小任何捆绑的文件,因此无需使用提供的文件或文件。-min.js.js.min.js-min.js.js.min.js-min.js

这不一定是对您特定问题的直接答案 - 这是一种完全规避问题的方法。

于 2013-09-06T17:47:06.867 回答