我在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 documentation -
中的描述行事注意:除非EnableOptimizations为true或者调试属性为 编译Web.config文件中的元素设置为false,文件 不会被捆绑或缩小。另外,.min版本 文件将不会被使用,将选择完整的调试版本。
对于ASP.NET MVC 4,这意味着使用调试配置文件 jquery-1.7.1.js将被添加到包中。在一个版本中 配置,将添加jquery-1.7.1.min.js。捆绑 框架遵循几个常见的约定,例如:
- 选择“.min”文件,以便在“FileX.min.js”和“FileX.js”时发布 存在即可。
- 选择非“.min”版本进行调试。
- 忽略“-vsdoc” 文件(例如jquery-1.7.1-vsdoc.js),仅供使用 智能感知。
上面显示的{version}外卡匹配用于 使用适当的版本自动创建一个jQuery包 您的Scripts文件夹中的jQuery。在此示例中,使用通配符 提供以下好处:
- 允许您使用NuGet更新到更新的jQuery版本 在视图中更改前面的捆绑代码或jQuery引用 页面。
- 自动选择调试配置的完整版本 以及发布版本的“.min”版本。
如果我添加“EnableOptimizations”,它似乎按预期运行。
有没有人注意到这个或找到了解决方案?
答案 0 :(得分:5)
MVC4只知道如何处理.min.js
文件。它无法识别-min.js
(短划线)。
我通常这样做的方法很简单,就是摆脱提供.min.js
和{{1}的库提供的任何-min.js
或.js
文件}或.min.js
。默认情况下,MVC会在您部署网站时自动缩小任何捆绑的-min.js
文件,因此无需使用提供的.js
或.min.js
文件。
这不一定是您特定问题的直接答案 - 这是完全规避问题的一种方法。