Услуги по связыванию, минимизации Mvc4 и сервисам AngularJS
Есть ли способ настроить способ компоновки Asp.Net MVC4 и функции миниатюризации, уменьшает файлы js?
Смысл, я не хочу полностью отключать минимизацию, но "как есть" он просто разбивает AngularJs.
Поскольку AngularJs использует подход DI и IoC для инъекционных сервисов в контроллерах, следующее:
function MyController($scope) { }
После округления становится:
function MyController(n) { }
Обычно это не проблема, но AngularJs использует имена параметров, чтобы понять, какую службу нужно вводить. Таким образом, $scope должен оставаться $scope, а также любым другим параметром в контроллерах angular. Все остальное, например, локальные переменные и т.д., Должно быть обычно сокращено.
Я не могу найти четкую документацию о том, как настроить Mvc4-минификацию, и она кажется довольно немой, чтобы она была "все или ничего", поэтому я думаю, что что-то не хватает.
Спасибо.
Ответы
Ответ 1
На самом деле вы можете (и должны!) написать код AngularJS, чтобы он был "безопасным". Подробности описаны в разделе "Аннотации зависимостей" http://docs.angularjs.org/guide/di, но, короче говоря, для глобальных контроллеров вы можете написать:
MyController.$inject = ['$scope'];
Обратите внимание, что глобально определенные контроллеры загрязняют глобальное пространство имен (см. this для получения более подробной информации), и его следует избегать. Если вы объявите контроллер на уровне модуля, вы также можете сделать его мини-безопасным:
angular.module('mymodule', []).controller('MyController', ['$scope', function($scope){
//controller code goes here
}]);
Ответ 2
если вы все еще хотите контролировать, что нужно для минимизации, а что нет (или если вы хотите включить уже измененную версию поставщиком плагинов), просто объявите два пакета и только минимизируйте один из них на свой BundleConfig.cs:
var dontMinify = new Bundle("~/bundles/toNotMinify").Include(
"~/Scripts/xxxxx.js");
bundles.Add(dontMinify);
var minify = new Bundle("~/bundles/toNotMinify").Include(
"~/Scripts/yyyyyy.js");
minify.Transforms.Add(new JsMinify());
bundles.Add(minify);
Ответ 3
Для тех из вас, кто не хочет/не может быть создан для написания синтаксиса "minification-safe" angular -DI, и не заботятся об обфускации имен переменных, я использовал BundleTransfomer вместе с Yui Js minifier - доступно через nuget:
Install-Package BundleTransformer.Core
Install-Package BundleTransformer.Yui
ДАЕТ ОЧЕНЬ мелкозернистый контроль над минерализацией/обфускацией. В мире angular просто установите для obfuscateJavascript в разделе yui web.config значение false.