Подтвердить что ты не робот

Услуги по связыванию, минимизации Mvc4 и сервисам AngularJS

Есть ли способ настроить способ компоновки Asp.Net MVC4 и функции миниатюризации, уменьшает файлы js?

Смысл, я не хочу полностью отключать минимизацию, но "как есть" он просто разбивает AngularJs.

Поскольку AngularJs использует подход DI и IoC для инъекционных сервисов в контроллерах, следующее:

function MyController($scope) { }

После округления становится:

function MyController(n) { }

Обычно это не проблема, но AngularJs использует имена параметров, чтобы понять, какую службу нужно вводить. Таким образом, $scope должен оставаться $scope, а также любым другим параметром в контроллерах angular. Все остальное, например, локальные переменные и т.д., Должно быть обычно сокращено.

Я не могу найти четкую документацию о том, как настроить Mvc4-минификацию, и она кажется довольно немой, чтобы она была "все или ничего", поэтому я думаю, что что-то не хватает.

Спасибо.

4b9b3361

Ответ 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.