System.Web.Optimization заставляет имена аргументов функции оставаться неизменными для определенных функций
С ASP.NET связывание с ScriptBundle
function StartController($scope, $location, $rootScope) {}
превращается в
function StartController(n,t,i) {}
Однако, поскольку я использую AngularJs, чтобы внедрение зависимостей все еще работало, имена аргументов не должны изменяться при минимизации. Как я могу гарантировать, что $scope, $location и $rootScope сохранят эти имена с минимизацией через ScriptBundle, но разрешат переименование аргументов в других местах?
3 ответа
Это не то, что вы можете изменить во встроенных типах пакетов, так как в настоящее время мы не предоставляем никаких ручек, которые можно настроить в базовых классах преобразования. Лучший способ сделать это - написать собственный IBundleTransform, который выполняет минификацию, передавая соответствующие настройки, чтобы не переименовывать переменные.
Т.е. что-то вроде:
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());
Angular предоставляет способ борьбы с минификацией. Если вы определяете контроллер, вы можете переписать свой код следующим образом:
YOUR_APP_MODULE.controller('CONTROLLER_NAME', ['$scope', '$location', '$rootScope', function($scope, $location, $rootScope){
// DO STUFF
}]);
На минификации это станет:
YOUR_APP_MODULE.controller('CONTROLLER_NAME', ['$scope', '$location', '$rootScope', function(n, t, i){
}]);
Вы можете сделать то же самое с другими угловыми компонентами.
Это работает с System.Web.Optimizations
пакет Nuget 1.1
https://gist.github.com/zaus/7436601
(Я включил несколько других концепций по пути)
По сути, вам нужно написать новый BundleTransform/Minifier, который предоставляет CodeSettings
так что вы можете изменить NoAutoRenameCollection
,