2016-04-24 5 views
0

Ich bin derzeit Refactoring der Javascript-Teile einer Website, und jetzt habe ich einige Skripts zusammen mit Browserify gebündelt. Das resultierende Skript wird zusammen mit anderen Ressourcen mithilfe von SquishIt gebündelt. Wenn SquishIt im Debug-Modus nicht alle Skripte zusammenfasst, scheint alles gut zu funktionieren, aber wenn es in der Produktion läuft, und SquishIt bündelt alles zusammen, bekomme ich Fehler aus dem Browserify-Teil meines Bundles. Der Fehler beklagt sich, dass r keine Längeneigenschaft hat (siehe Zeile 18). Dieser Teil des Codes wird von Browserify beim Bündeln der Skripte erstellt.Fehler beim Browsey Bundle mit SquishIt erhalten

(function e(t, n, r) { function s(o, u) { if (!n[o]) { if (!t[o]) { var a = typeof require == "function" && require; if (!u && a) return a(o, !0); if (i) return i(o, !0); var f = new Error("Cannot find module '" + o + "'"); throw f.code = "MODULE_NOT_FOUND", f } var l = n[o] = { exports: {} }; t[o][0].call(l.exports, function(e) { var n = t[o][1][e]; return s(n ? n : e) }, l, l.exports, e, t, n, r) } return n[o].exports } var i = typeof require == "function" && require; for (var o = 0; o < r.length; o++) s(r[o]); return s })({

ich wirklich an nichts denken können, die SquishIt mit alle Skripte bündeln würde die Logik der browserified Skripte brechen. Was könnte die Ursache dafür sein? This gist zeigt den gesamten Quellcode, falls relevant.

Ich habe nichts auf der ASP.NET-Seite (in der Bündelung) geändert, und der relevante Teil meiner'Head.ascx' sieht aus wie:

Bundle.JavaScript() 
.Add(Assets.JavaScript.GetUrl("main.js").ToString()) 
.Add(Assets.JavaScript.GetUrl("Plugins/raphael-min.js").ToString()) 
.Add(Assets.JavaScript.GetUrl("Plugins/vector_map.js").ToString()) 
// more ... 
.Render("~/Content/"+Assets.VersionString+"/Scripts/Combined/combined.js") 

Antwort

1

einen Blick auf diese kommentieren kann helfen https://github.com/jetheredge/SquishIt/issues/320#issuecomment-139921409

Gibt es einen Grund, warum Sie zwei verschiedene Bündelungslösungen verwenden müssen?

+0

Danke! Ich habe herausgefunden, dass die verkleinerte Ausgabe, dass SquishIt (oder ein anderer darin enthaltener Minifier) ​​die von browserify erzeugten Schließungen zerstört hat; "auspacken" und die Abhängigkeiten außer Betrieb setzen. Dies führte dazu, dass wir uns an den integrierten ASP.NET-Bundler gewandt haben, der gut funktionierte, aber die minimierten Fehler, die zeigten, dass wir einige nicht übersetzte ES6-Lambda/Pfeil-Funktionen enthielten, die der Grund sein könnten, warum SquishIt zusammenbrach. – oligofren

+0

Warum wir zwei verschiedene Bündelungslösungen verwenden, habe ich dieses Legacy-Projekt kürzlich übernommen, um es zu bereinigen und moderne FE-Praktiken einzuführen. Mit Browserify kann ich Globals loswerden, indem ich jeweils ein Skript nach CommonJS verschiebe und dabei nicht alles andere berühre. – oligofren

+1

In diesem Fall würde ich zuerst versuchen, zum eingeschlossenen YUI-Minifier zu wechseln. Wenn das nicht funktioniert, gibt es ein Beta-Paket für SquishIt v1.0, das auf Nuget verfügbar ist und neuere Versionen beider Minifier verwendet. Es gibt einige signifikante Änderungen, die noch kommen, aber ich denke, es ist wahrscheinlich in einer guten Form zu verwenden. https://www.nuget.org/packages/SquishIt/1.0.0-beta2 – AlexCuse

Verwandte Themen