Fat*_*tal 260 javascript c# asp.net-mvc-4 bundling-and-minification
我有一个奇怪的问题,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"));
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我宣布
<html>
<head>
@Scripts.Render("~/Scripts/jquery")
</head><body>test</body>
</html>
Run Code Online (Sandbox Code Playgroud)
当它呈现时,它只会呈现
<html>
<head>
<script src="/Scripts/jquery-1.8.0.js"></script>
</head>
<body>test</body>
</html>
Run Code Online (Sandbox Code Playgroud)
如果我将jquery.tmpl.min.js重命名为jquery.tmpl.js(并相应地更新bundle中的路径),则会正确呈现这两个脚本.
是否有一些配置设置导致它忽略'.min.js'文件?
小智 255
我最初发布的解决方案是有问题的(是一个肮脏的黑客).正如许多评论者所指出的那样,在Microsoft.AspNet.Web.Optimization包中调整的行为已经改变,调整不再起作用了.现在我无法使用软件包的1.1.3版重现该问题.
请参阅System.Web.Optimization.BundleCollection的源代码(例如,您可以使用dotPeek)以更好地了解您将要执行的操作.另请阅读Max Shmelev的回答.
原始答案:
将.min.js重命名为.js或执行类似的操作
public static void AddDefaultIgnorePatterns(IgnoreList ignoreList)
{
if (ignoreList == null)
throw new ArgumentNullException("ignoreList");
ignoreList.Ignore("*.intellisense.js");
ignoreList.Ignore("*-vsdoc.js");
ignoreList.Ignore("*.debug.js", OptimizationMode.WhenEnabled);
//ignoreList.Ignore("*.min.js", OptimizationMode.WhenDisabled);
ignoreList.Ignore("*.min.css", OptimizationMode.WhenDisabled);
}
public static void RegisterBundles(BundleCollection bundles)
{
bundles.IgnoreList.Clear();
AddDefaultIgnorePatterns(bundles.IgnoreList);
//NOTE: it's bundles.DirectoryFilter in Microsoft.AspNet.Web.Optimization.1.1.3 and not bundles.IgnoreList
//...your code
}
Run Code Online (Sandbox Code Playgroud)
Max*_*lev 176
Microsoft暗示以下行为(我更喜欢在我的项目中遵循它):
因此,您将自动拥有的script.js包含在DEBUG模式和script.min.js在释放模式.
你也可以有.debug.js版本.在这种情况下,该文件包含在DEBUG中的以下优先级中:
在RELEASE中:
顺便说一句,在MVC4中使用.min版本的脚本的唯一原因是当缩小版本无法自动处理时.例如,以下代码无法自动进行模糊处理:
if (DEBUG) console.log("Debug message");
Run Code Online (Sandbox Code Playgroud)
在所有其他情况下,您只需使用脚本的调试版本即可.
如果您拥有的只是文件的缩小版本,我找到的最简单的解决方案是复制缩小的文件,从复制的文件名中删除.min,然后引用捆绑中的非缩小文件名.
例如,假设您购买了一个js组件,他们为您提供了一个名为some-lib-3.2.1.min.js的文件.要在捆绑包中使用此文件,请执行以下操作:
复制some-lib-3.2.1.min.js并将复制的文件重命名为some-lib-3.2.1.js.在项目中包含这两个文件.
引用捆绑包中的非缩小文件,如下所示:
bundles.Add(new ScriptBundle("~/bundles/libraries").Include(
"~/Scripts/some-lib-{version}.js"
));
Run Code Online (Sandbox Code Playgroud)仅仅因为名称中没有'min'的文件实际上是缩小的,不应该引起任何问题(除了它本质上是不可读的事实).它仅用于调试模式,并作为单独的脚本写出.当不处于调试模式时,预编译的min文件应包含在您的包中.
| 归档时间: |
|
| 查看次数: |
93808 次 |
| 最近记录: |