jquery 1.9.0 und modernizr können nicht mit dem ASP.NET Web Optimization Framework minimiert werden

Lesezeit: 6 Minuten

Benutzer-Avatar
Remy

Wir verwenden das ASP.NET Web Optimization Framework mit Bundles und Minimierung. Ein Paket enthält nur jquery und modernizr. Dies alles funktionierte gut mit jquery 1.8.3, aber seit wir auf 1.9.0 aktualisiert haben, funktioniert die Kombination jquery/modernizer-Bundle nicht mehr.

bundles.Add(new ScriptBundle("~/st-scripts-load-first.js")
       .Include("~/Resources/JavaScript/jquery-1.9.0.js",
                "~/Resources/JavaScript/modernizr.form-placeholder.js"));

Wir haben sowohl jquery-1.9.0.js als auch jquery-1.9.0.min.js im Verzeichnis. Wenn keine .min-Datei vorhanden ist, generiert das Optimierungsframework automatisch eine. Es funktioniert nicht, ob die .min-Datei vorhanden ist oder nicht.
Es funktioniert, wenn die Kompilierung debug=”true” ist und es keine Minimierung oder Bündelung gibt.

/* Minification failed. Returning unminified contents.
(5,2-3): run-time warning JS1195: Expected expression: *
(11,60-61): run-time warning JS1004: Expected ';': {
(395,2-3): run-time warning JS1195: Expected expression: )
(397,21-22): run-time warning JS1004: Expected ';': {
(397,4590-4591): run-time warning JS1195: Expected expression: )
(398,28-29): run-time warning JS1195: Expected expression: )
(398,84-85): run-time warning JS1002: Syntax error: }
(402,44-45): run-time warning JS1195: Expected expression: )
(408,1-2): run-time warning JS1002: Syntax error: }
(393,5-22): run-time warning JS1018: 'return' statement outside of function: return Modernizr;
(404,5,406,16): run-time warning JS1018: 'return' statement outside of function: return !!('placeholder' in (Modernizr.input || document.createElement('input')) &&
               'placeholder' in (Modernizr.textarea || document.createElement('textarea'))
             );
 */

  • Benutzt du 1.9.min Anstatt von 1.8.3?

    – Elchmann

    18. Januar 2013 um 16:05 Uhr

  • Was genau funktioniert nicht mehr?

    – rummeln

    18. Januar 2013 um 16:05 Uhr

  • Wir haben sowohl 1.9 als auch 1.9.min im Verzeichnis. Das Bündelungsframework verwendet automatisch die .min-Datei, wenn debug=false. Ich habe die Frage mit weiteren Details und dem Fehlercode aktualisiert, den das Minifizierungsframework generiert hat.

    – Remi

    18. Januar 2013 um 17:01 Uhr

  • Haben Sie versucht: Include(“~/Resources/JavaScript/jquery-{version}.js”) ?

    – Pablo Romeo

    23. Januar 2013 um 22:05 Uhr

  • Ich habe das gleiche Problem. Es sieht so aus, als ob Minifier jQuery 1.9.0 und sogar jQuery Migration nicht verarbeiten kann

    – Felipe Pesoto

    24. Januar 2013 um 1:28 Uhr

Ich bin sicher, dass die Ursache Ihres Problems die letzte Zeile von jquery-1.9.0.min.js ist:

//@ sourceMappingURL=jquery.min.map

Die unminifizierte Version von jQuery 1.9 enthält dies nicht. Warum, erkläre ich gleich.

Ich habe selbst bemerkt, dass jquery-1.9.0.min.js mit einer anderen Datei gebündelt ist – und dieser anderen Datei folgt jquery-1.9.0.min.js – dann ist die folgende JS-Datei sozusagen beschädigt.

Der Grund dafür ist, dass der Anfang der folgenden Datei an das “//@“-Zeile von jQuery, was bedeutet, dass es dann zu einem langen, erweiterten Kommentar wird. In Ihrem Fall bedeutete dies, dass die

window.Modernizr=function(n,t,i){function...

Skript beim Start von Modernizr wurde vom Bündelungsprozess als Kommentar wie folgt ausgegeben:

//@ sourceMappingURL=jquery.min.map window.Modernizr=function(n,t,i){function...

Da ist ein Diskussion über den Bug Tracker von jQuery was das betrifft.

Sie können entweder diese letzte Zeile entfernen oder sie in mehrzeilige Kommentarsymbole umschließen:

/*
//@ sourceMappingURL=jquery.min.map
*/

Außerdem können Sie sehen, dass Modernizr am Ende seiner minimierten Version auch eine Quellkarte enthält. Und das aus gutem Grund.

Der Sinn dahinter ist, Ihnen beim Debuggen eines Problems zu helfen, wenn die minimierte Version des Codes verwendet wurde. Diese Zeile teilt dem Browser mit, dass diese minimierte Datei einer anderen Datei zugeordnet ist, die beim Debuggen helfen kann. Um dies nutzen zu können, müssen Sie diese referenzierte Datei (jquery.min.map) auf dem Server haben oder auf den Client herunterladen. Außerdem glaube ich, dass Chrome der einzige Browser ist, der dies derzeit unterstützt. es befindet sich bei Firefox noch in der Entwicklung.

Diese Seite hat eine ausgezeichnete Erklärung von Source Maps.

Zusammenfassend sollte das Entfernen also keine Probleme verursachen, es sei denn, Sie möchten beim Debuggen im Browser auf die ursprüngliche Version der Quelle zurückverweisen. In Ihrem Fall aufgrund der Funktionsweise des Optimization Framework von ASP.NET, wenn debug=”Wahr” Die nicht minimierten Versionen werden ohnehin bereitgestellt, sodass Sie die sourceMappingURL wahrscheinlich nicht verwenden müssen.

  • behoben in jquery, aber nicht in jquery.migrate 🙁

    – Der Dorfidiot

    19. März 2013 um 1:16 Uhr

  • Village, danke für die Hinweise. Gleicher Fix wie jQuery. Fügen Sie am Ende von jquery.migrate.min.js die Tags /* */ um das sourceMapping herum hinzu

    – Sam

    17. April 2013 um 18:05 Uhr

  • Ich gehe davon aus, dass Sie den Kommentar am Ende zu Debugging-Zwecken benötigen werden, aber ich bin überrascht, dass der einzeilige Kommentar nicht in jedem Fall vollständig vom Optimierer entfernt wurde, aber ich hätte angenommen, dass dies möglich sein sollte das (und könnte auf einem Produktionssystem auf jeden Fall eine nette Idee sein, da Sie es weniger wahrscheinlich debuggen müssen).

    – jamiebarrow

    3. Mai 2013 um 8:34 Uhr


  • Dies ist auch ein Problem für Kendo UI v2013.3.1119. Danke, das war sehr hilfreich.

    – Daniel Schilling

    27. Januar 2014 um 22:13 Uhr

Ich konnte nicht auf die Antwort von awj oben antworten, also habe ich einfach dafür gestimmt. Fantastisches Stück Detektivarbeit. Ich wollte einen Kommentar hinzufügen, dass das Problem zwar in jquery 1.9.1 behoben wurde, aber jetzt in jquery-migrate-1.1.0 auftaucht

Ich habe die Zuordnungsdateireferenz nur als einzeiligen Kommentar am Ende der Datei “jquery-migrate-1.1.0.min.js” bemerkt. Also habe ich dem Vorschlag von awj folgend einen mehrzeiligen Kommentar gemacht.

Also Zeile 3:

//@ sourceMappingURL=dist/jquery-migrate.min.map

wird nun wie folgt zu den Zeilen 3, 4 und 5:

/*
//@ sourceMappingURL=dist/jquery-migrate.min.map
*/

Sobald ich wieder auf meinen ISP hochgeladen habe, habe ich wieder die volle Ajax-Funktionalität.

Nochmals vielen Dank AWJ, das hat uns sehr geholfen!

Wenn Sie die Antworten lesen, sogar die akzeptierten Antworten, besteht die empfohlene Lösung für dieses Problem darin, Ihre Skripte zu ändern, damit der Bundler keine Probleme damit hat. Das macht für mich keinen Sinn, dies ist eindeutig ein Fehler des Bundlers, der verschiedene Skripte nicht richtig verkettet, insbesondere hat der Bundler ein Problem, wenn die letzte Zeile des n-Skripts ein normaler Zeilenkommentar ist

// this is the last line of the n script

und dann beginnt Ihr nächstes Skript nicht mit einem einzeiligen Kommentar

function(){ var ...

der Bundler, ist standardmäßig mit a konfiguriert ; als die ConcatenationToken Der gebündelte Code sieht also so aus:

// this is the last line of the n script;function(){ var ...

Sicherlich schlägt das Laden des Skripts irgendwo mit einem Syntaxfehler fehl.

Es wurde vorgeschlagen, die letzte Zeile des Skripts so zu ändern, dass sie kein Inline-Kommentar ist, sondern ein mehrzeiliger Kommentar, also wenn der Code mit endet */ Der Parser wird mit einer Funktionsdeklaration oder etwas anderem direkt danach in Ordnung sein.

Ich mag es nicht, meine Skripte zu ändern, viele wurden von jemand anderem verfasst (jquery usw.) und ich möchte sie nicht ändern, was ist, wenn ich sie aktualisieren muss und diesen Fehler nach dem Upgrade einer Website wieder finden werde und es läuft nicht mit debug="true" in der Konfig.

Ich komme mit dieser Lösung, die für mich besser funktioniert

bundles.Add(new ScriptBundle("~/bundles/mobile") { 
                ConcatenationToken = ";\r\n" }
       .Include("~/Scripts/jquery-1.11.3*",
                "~/Scripts/jquery-timeago*",
                "~/Scripts/jquery.mobile-1.4.5*",

Auf diese Weise zwingen wir den Bundler, die Skripte immer mit einem Zeilenumbruchzeichen zu trennen. Dies sollte standardmäßig geschehen, wenn die letzte Zeile des vorherigen Skripts ein einzeiliger Kommentar ist.

  • Gute Idee! Danke für das Teilen.

    – Remi

    14. September 2015 um 19:19 Uhr

  • Vielleicht dieses kleine Ding ConcatenationToken = “;” + Environment.NewLine Aber anders als diese perfekte Lösung!

    – Jernej Novak

    14. Dezember 2015 um 9:20 Uhr

Möglicherweise stimmt etwas mit Ihrer Kopie von modernizr.form-placeholder.js nicht.

Ich bin gerade auf den gleichen Fehler gestoßen, als ich versucht habe, jquery.peity.js zu laden.

Als ich die Bibliothek entfernte, wurde die Seite einwandfrei geladen. Also habe ich einfach die rohen Js von ihrer Website geholt und die Datei neu erstellt, und sie wurde ohne Probleme geladen.

1187260cookie-checkjquery 1.9.0 und modernizr können nicht mit dem ASP.NET Web Optimization Framework minimiert werden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy