2012-03-27 48 views
3

在使用第三方JQuery插件的MVC3應用程序中使用SquishIt時,我遇到了很多錯誤。在我的開發機器上,如果我在Bundle命令中設置了ForceDebug方法,那麼一切正常,並且JS按正常方式處理。但是,如果我設置了ForceRelease方法(在開始生產之前進行測試),那麼當我啓動該站點時,FireFox將顯示「不是函數」錯誤。我曾嘗試在web.config中設置compilation debug="true",但沒有任何改進。MVC3中的SquishIt ForceRelease無法正確地減小JQuery插件

這是我的_layout.cshtml文件中的JS調用。所有捆綁用於標準JQuery插件:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js"></script> 
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.9/jquery.validate.min.js"></script> 
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js"></script> 
<script type="text/javascript" src="@Url.Content("~/Scripts/jquery-ui-1.8.18.custom.min.js")"></script> 
@(Bundle.JavaScript() 
    .Add("~/Scripts/modernizr-2.5.3.js") 
    .Add("~/Scripts/jquery.fileinput.js") 
    .Add("~/Scripts/jquery.numeric.js") 
    .Add("~/Scripts/jquery.maskedinput-1.3.min.js") 
    .Add("~/Scripts/jquery.maxlength_countdown.js") 
    .Add("~/Scripts/jquery.qtip.min.js") 
    .Add("~/Scripts/jquery.pnotify-1.1.0.min.js") 
    .Add("~/Scripts/fileuploader.js") 
    .Add("~/Scripts/jquery.dropdownchecklist-1.4.js") 
    .Add("~/Scripts/jquery.blockUI.js") 
    .Add("~/Scripts/jquery.textarearesizer.min.js") 
    .ForceRelease() 
    .MvcRender("~/CompiledContent/combined_#.js") 
) 

以下是FireFox顯示的錯誤示例。這改變了基於什麼我已經包括在包:

function (n) {var i = (n.browser.msie ? "paste" : "input") + ".mask", t = window.orientation != undefined;n.mask = {definitions: {9: "[0-9]", a: "[A-Za-z]", '*': "[A-Za-z0-9]"}, dataName: "rawMaskFn"}, n.fn.extend({caret: function (n, t) {if (this.length != 0) {if (typeof n == "number") {return t = typeof t == "number" ? t : n, this.each(function() ... YADDA內容非常重要 - 在這裏腳本的另一個50線...... function() {setTimeout(i, 0);})();}).bind("blur.mask", function() {v(), c.val() != p && c.change();}).bind("keydown.mask", nt).bind("keypress.mask", d).bind(i, function() {setTimeout(function() {c.caret(v(true));}, 0);}), v();});}});}(jQuery) is not a function

$(".dropdown-checklist").dropdownchecklist is not a function

什麼有什麼想法我可能在這裏搞砸了?

回答

8

我們遇到過這樣的事情......發現其中一個文件在javascript函數末尾沒有分號。這造成了種種破壞。當它本身是一個文件時,該函數可以正常工作,但是一旦它被合併,分號就會產生變化。

您還可以將Minifier設置爲null縮小器並查看它創建的輸出。這可能有助於進行更多的故障排除。

+0

你搖滾馬克!這表明我朝着正確的方向前進。對於其他人,我發現'jquery-numeric.js'有一些沒有終止的函數,''jquery-maskedinput-1.3''在'}(jQuery));'後沒有結尾分號。再次感謝! – bigmac 2012-03-27 19:39:20

+3

我有完全相同的問題。未以分號結尾的第三方JavaScript文件。我會保存所有其他人一些谷歌搜索,這就是你如何添加一個null minifier:.WithMinifier(新的SquishIt.Framework.Minifiers.JavaScript.NullMinifier()) – Arbiter 2012-05-29 15:26:42