【发布时间】: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