Wie mache ich Microsoft-Bundle-Ausgabe JavaScript nicht HTML-Skript-Tags

8

Ich baue ein ASP.NET MVC4-basiertes jQuery-Plug-in und möchte den Standard Microsoft Bundler .

Nun, normalerweise, wenn ich den Bundler benutze, ist dies die letzte Verwendung:

%Vor%

Mit einer solchen Ausgabe in debug:

%Vor%

Und ein einzelnes Tag für die verkleinerte und kombinierte Datei in der offiziellen Version.

Da wir jedoch ein jQuery-Plug-in erstellen, möchte ich den Minifier verwenden, um das tatsächliche JavaScript aus den verschiedenen Dateien einzufügen, zB in DEBUG, wenn ich Object1 in einer Datei definiert und Object2 in einer anderen definiert habe dann bekomme ich das:

%Vor%

und in der Version würde ich den minimierten Inhalt bekommen.

Von der MSDN Ich habe gesehen, dass der Bundler das standardmäßig nicht kann. Aber ich frage mich, gibt es eine Erweiterung, die dies oder eine andere Minifing-Bibliothek tun kann? Obwohl ich lieber mit dem Microsoft Bundler bleiben würde.

In meiner eigenen Studie zur Erweiterung des System.Web.Optimizer habe ich das Projekt CodePlex gefunden von System.Web.Optimization , wo gesagt wird, dass es noch nicht Open Source ist, macht das Ausstrecken irgendwie schwierig für irgendjemanden, der nicht wirklich daran arbeitet.

EDIT: Da ich weiß, dass ich den System.Web.Optimizer nicht wirklich erweitern kann, ging ich mit einer Kompromisslösung und das ist es, was ich am Ende benutzt habe.

Im Controller:

%Vor%

Und in der Ansicht ( jQueryComponent.cshtml ):

%Vor%

Irgendwelche Ideen, wie man dies verbessern kann, sind willkommen neben der richtigen Erweiterung des Bündlers.

Obwohl das funktioniert, ist das alles andere als ideal und ich bin mir dessen bewusst Bitte kritisieren Sie diesen Ansatz nicht, es sei denn, Sie haben eine Alternative.

    
Idra 29.11.2013, 11:52
quelle

2 Antworten

14

Sie können tun, was der BundleHandler tut: Holen Sie sich ein Bundle basierend auf dem virtuellen Pfad (den Sie auch verwenden würden)      @Script.Render ), generieren Sie die Antwort und schreiben Sie das < a href="http://msdn.microsoft.com/en-us/library/system.web.optimization.bundlerresponse.content.aspx"> Inhalt .

%Vor%

Oder kurz:

%Vor%

BEARBEITEN: Um uneminifizierten Inhalt im Debug zu erhalten, können wir tun was Skripte macht : Holen Sie das Bundle erneut, aber anstatt die Antwort zu generieren, iterieren Sie die Dateien und schreiben Sie deren Inhalt ( abgegrenzt ).

%Vor%     
Samu Lang 11.12.2013, 20:03
quelle
2

Es ist einfacher, dafür eine eigene Klasse und einen stabilen Minifier zu erstellen.

Was den Minifier betrifft, können Sie einen der folgenden verwenden:

Ihre benutzerdefinierte Klasse sollte:

  • sei statisch
  • enthält List<string> , um die Dateien in jedem Bündel zu speichern
  • enthält ein Wörterbuch, in dem die Paketnamen und ihre Dateien gespeichert werden: Dictionary<string,List<string>> mit einem Paketnamen string und eine Liste mit Dateinamen List<string> .

Um die nichtminimierte Version zu erstellen, müssen Sie einfach alle Dateien in einer Zeichenfolge mit einer der dafür verfügbaren Klassen lesen (für Beispiel StringBuilder , StringWriter , StreamReader , File ). Wenn Sie die Platzhalternamen im Bundler nachahmen müssen, verwenden Sie Directory und vielleicht Regex classes.

Das Ergebnis des Lesens sollte in einem statischen Wörterbuch gespeichert werden, das den Namen des Bündels und den Inhalt des Pakets enthält (zum Zwischenspeichern und Vermeiden des wiederholten Lesens der gleichen Dateien).

Schließlich müssen Sie es minimieren.

Sie können die Minificacion abhängig von zwei verschiedenen Dingen umschalten:

Minimierung mit YUI-Kompressor:

%Vor%

Minimieren mit MS Ajax Minifier:

%Vor%

Sie sollten die verkleinerten Versionen auch in einem statischen Wörterbuch speichern, um sie auch zwischenzuspeichern.

Dies ist ein grundlegendes Arbeitsprobe:

%Vor%     
JotaBe 10.12.2013 13:08
quelle

Tags und Links