我有一个奇怪的问题与mvc4捆绑不包括文件扩展名.min.js
在BundleConfig类中,我声明
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/Scripts/jquery")
.Include("~/Scripts/jquery-1.8.0.js")
.Include("~/Scripts/jquery.tmpl.min.js"));
}
在我看来,我宣布
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
当它渲染时,它只渲染
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
如果我将jquery.tmpl.min.js重命名为jquery.tmpl.js(并相应地更新包中的路径),两个脚本都将正确呈现。
是否有一些配置设置导致它忽略'.min.js'文件?
人
我会保持简单,直到微软采取行动
试试这个
在RegisterBundles中为Kendo创建这个bundle
bundles.Add(new StyleBundle("~/Content/kendo/css").Include(
"~/Content/kendo/2012.3.1121/kendo.common.min.css",
"~/Content/kendo/2012.3.1121/kendo.dataviz.min.css",
"~/Content/kendo/2012.3.1121/kendo.blueopal.min.css"
));
在_Layout。CSHTML放了这个:
@if (HttpContext.Current.IsDebuggingEnabled)
{
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.common.min.css")"
rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.dataviz.min.css")"
rel="stylesheet" type="text/css" />
<link href="@Url.Content("~/Content/kendo/2012.3.1121/kendo.blueopal.min.css")"
rel="stylesheet" type="text/css" />
}
else
{
@Styles.Render("~/Content/kendo/css")
}
通过这种方式,我们在生产中得到了最好的包,在调试中得到了引用
当微软修正他们的MVC 4代码时再修正它
如果您拥有的只是一个文件的缩小版,我发现的最简单的解决方案是复制缩小版文件,从复制的文件名中删除.min,然后在您的包中引用非缩小版文件名。
例如,假设你购买了一个js组件,他们给了你一个名为some-lib-3.2.1.min.js的文件。要在bundle中使用这个文件,请执行以下操作:
复制some-lib-3.2.1.min.js,并将复制的文件重命名为some-lib-3.2.1.js。在项目中包含这两个文件。
在你的bundle中引用未缩小的文件,像这样:
包。添加(新ScriptBundle(“~ /包/库”)。包括(
“~ /脚本/一些自由- {version} . js”
));
仅仅因为名称中没有“min”的文件实际上被缩小了,不应该导致任何问题(除了它本质上是不可读的事实)。它只在调试模式下使用,并作为单独的脚本编写。当不在调试模式时,预编译的min文件应该包含在你的包中。
要呈现*.min.js文件,必须禁用BundleTable。EnableOptimizations,这是一个应用于所有捆绑包的全局设置。
如果您只想为特定的包启用优化,您可以创建自己的ScriptBundle类型,在枚举包中的文件时临时启用优化。
public class OptimizedScriptBundle : ScriptBundle
{
public OptimizedScriptBundle(string virtualPath)
: base(virtualPath)
{
}
public OptimizedScriptBundle(string virtualPath, string cdnPath)
: base(virtualPath, cdnPath)
{
}
public override IEnumerable<BundleFile> EnumerateFiles(BundleContext context)
{
if (context.EnableOptimizations)
return base.EnumerateFiles(context);
try
{
context.EnableOptimizations = true;
return base.EnumerateFiles(context);
}
finally
{
context.EnableOptimizations = false;
}
}
}
对于始终应该使用最小化文件的包,无论是否存在非最小化文件,都应使用OptimizedScriptBundle而不是ScriptBundle。
ASP的Kendo UI示例。NET MVC,它仅作为一个缩小文件的集合分发。
bundles.Add(new OptimizedScriptBundle("~/bundles/kendo")
.Include(
"~/Scripts/kendo/kendo.all.*",
"~/Scripts/kendo/kendo.aspnetmvc.*",
"~/Scripts/kendo/cultures/kendo.*",
"~/Scripts/kendo/messages/kendo.*"));