6 Stimmen

System.Web.Optimization sorgt dafür, dass die Namen der Funktionsargumente bei bestimmten Funktionen gleich bleiben

Mit ASP.NET Bündelung mit einem ScriptBundle

function StartController($scope, $location, $rootScope) {}

wird umgewandelt in

function StartController(n,t,i) {}

Da ich jedoch AngularJs verwende, dürfen die Namen der Argumente beim Minifizieren nicht geändert werden, damit die Dependency Injection weiterhin funktioniert. Wie kann ich sicherstellen, $scope, $location und $rootScope halten diese Namen mit der Minifizierung durch ein ScriptBundle, aber erlauben Argument Umbenennung an anderen Stellen?

3voto

Hao Kung Punkte 27900

Dies ist nicht etwas, das Sie an den eingebauten Bundle-Typen ändern können, da wir derzeit keine Regler zur Verfügung stellen, die Sie an den zugrundeliegenden Transformationsklassen verändern können. Der beste Weg, dies zu erreichen, ist es, eine eigene IBundleTransform zu schreiben, die die Minifizierung durchführt und dabei die entsprechenden Einstellungen vornimmt, um Variablen nicht umzubenennen.

D.h. etwas wie:

public class CustomTransform : IBundleTransform {
    public void process(BundleContext context, BundleResponse response) {
         response.Content = MyMinifier.MinifyWithoutRename(response.Content);
    }
}

BundleTable.Bundles.Add(new Bundle("~/bundles/mybundle", new CustomTransform());

2voto

drzaus Punkte 22843

Dies funktioniert mit System.Web.Optimizations Nuget-Paket 1.1

https://gist.github.com/zaus/7436601

(Ich habe ein paar andere Konzepte aus der Zeit mit einbezogen)

Im Wesentlichen müssen Sie einen neuen BundleTransform/Minifier schreiben, der die CodeSettings so können Sie die NoAutoRenameCollection .

2voto

Karanvir Kang Punkte 2029

Angular bietet eine Möglichkeit, mit Minification umzugehen. Wenn Sie einen Controller definieren, können Sie Ihren Code umschreiben als:

YOUR_APP_MODULE.controller('CONTROLLER_NAME', ['$scope', '$location', '$rootScope', function($scope, $location, $rootScope){
    // DO STUFF
}]);

Bei Minification wird dies zu:

YOUR_APP_MODULE.controller('CONTROLLER_NAME', ['$scope', '$location', '$rootScope', function(n, t, i){
}]);

Ähnliches kann man auch mit anderen Angular-Komponenten machen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X