【问题标题】:MVC minification not including a file unless I modify it a certain way除非我以某种方式修改它,否则 MVC 缩小不包括文件
【发布时间】:2014-12-15 04:37:16
【问题描述】:

我有一个 MVC 包,其中一个文件根本没有包含在输出中,即使可以正确找到它。我熟悉所有标准捆绑规则(min vs no min、.debug vs .js 等),但这似乎与文件的内容有关。

编辑:配置(一开始就应该包括这个)

  • "Microsoft.AspNet.Web.Optimizationv1.0
  • WebGreasev1.1
  • MVC Stuffv4.0.20710.0

玩了一会儿,我发现如果我稍微修改一下文件,它就会包含在输出中。如果撤消更改,则整个文件只是包含在输出中。没有乱码、损坏等,根本不存在。

捆绑包如下所示:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    "~/Scripts/jquery-{version}.js",
    "~/Scripts/jquery.unobtrusive*",
    ...
    "~/Scripts/underscore/underscore.js",
    "~/Scripts/underscore/underscore.string.js"
));

问题出在underscore.string.min.js。这个文件的开头是这样的(它是 1 行):

!function (e, t) { "use strict"; var n = t.prototype.trim, //...

我发现如果我进行此更改,undescore.string.min.js 文件将被正确包含。某些更改(例如添加评论)不起作用。在第一行添加对console.log(""); 的调用也可以,但是对console.log() 的实际调用被¿删除了?

;
!function (e, t) { "use strict"; .... 
  • ; 放在第一行不起作用 (;!function (e, t) {)
  • 删除 .min.js 文件并让 ASP.NET MVC 正常工作
  • 什么! 无论如何!

它之前的文件underscore.min.js 如下所示:

//     Underscore may be freely distributed under the MIT license.
(function(){/* lots of code */}).call(this);
//# sourceMappingURL=underscore-min.m

最终捆绑的缩小输出如下所示:

function"==typeof define&&define.amd&&define("underscore",[],function(){return n})}
.call(this),!function(n,t){"use strict";var a=t.prototype.trim,s=t.prototype.trimRight

这让我对使用任何提供的.min.js 文件感到有点紧张,因为我不太确定什么会失败以及何时会失败。如果它确实失败了,在我能找到的任何地方都没有通知或警告告诉我处理特定文件时出了点问题(例如,它导致没有输出?)。我最好放弃预先缩小的资产吗?

【问题讨论】:

  • 感叹号看this question
  • 我现在收到!,谢谢。我认为可能还有更多...
  • 我想知道为什么捆绑过程会打破这种模式。也许有人可以阐明一些...
  • 我看看能不能做一个更简单的项目,尽量减少问题。也许是更复杂的解释
  • 在一个新的 MVC5 应用程序中,使用 jquery、jquery.unobtrusive、下划线 1.5.1 和最新的 underscore.string.min.js 创建一个包似乎工作正常。该项目正在使用 Microsoft.AspNet.Web.Optimization 1.1.3 和 WebGrease 1.5.2

标签: javascript asp.net-mvc-4 underscore.js bundling-and-minification


【解决方案1】:

这似乎适用于最新版本的Microsoft.AspNet.Web.OptimizationWebGrease

  • Microsoft.AspNet.Web.Optimization 1.1.3
  • WebGrease 1.5.2

对于这些版本,按以下方式创建捆绑包可以正常工作:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
    "~/Scripts/jquery-{version}.js",
    "~/Scripts/jquery.unobtrusive*",
    "~/Scripts/underscore/underscore.js",
    "~/Scripts/underscore/underscore.string.min.js"
));

虽然这不能解释问题,但升级到最新版本可以解决问题。

【讨论】:

  • 当然为我修好了。由于该修复不涉及更新 MVC 的任何其他部分,因此它既好又安全。另外,我的淘汰赛问题是缩小的 js 是错误的。也许 nuget 只更新了一个文件的内容,或者发生了其他一些错误。把它置于坏运气之下,继续前进。
猜你喜欢
  • 1970-01-01
  • 2018-08-10
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
  • 2013-06-09
  • 2017-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多