AngularJS не работает в режиме выпуска (минимизированный)

У меня есть директивы AngularJS и Angular для Bootstrap в проекте, оба из которых были добавлены через Nuget.

Когда compilation debug="true" все работает нормально, но как только я изменяю compilation debug на false, Angular перестает работать, и я получаю следующая ошибка в консоли Chrome:

Error: [$injector:unpr] http://errors.angularjs.org/1.2.15/$injector/unpr?p0=nProvider%20%3C-%20n
at Error (native)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:448
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14726
at Object.i [as get] (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:13802)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14801
at i (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:13802)
at r (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14014)
at Object.instantiate (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14185)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:30669
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:23558 angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1
(anonymous function) angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1

Все остальные мои Javascript/CSS работают, как и ожидалось. Что может привести к тому, что Angular перестанет работать после минимизации? Это известная проблема?

Спасибо


person JMK    schedule 27.03.2014    source источник


Ответы (1)


ASP.NET MVC минимизирует файлы javascript, когда compilation debug установлено значение "false". учебник по angular включает следующее примечание о минимизации:

Поскольку Angular выводит зависимости контроллера из имен аргументов функции-конструктора контроллера, если бы вы минимизировали код JavaScript для [вашего] контроллера, все аргументы его функций также были бы минимизированы, и инжектор зависимостей не смог бы правильно идентифицировать услуги.

Наиболее распространенным методом решения этой проблемы является запись в скобках, например:

phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);

Этот вопрос SO объясняет важность безопасного синтаксиса минимизации:

person j.wittwer    schedule 27.03.2014
comment
ngAnnotate также можно использовать, если вы не хотите аннотировать свой код вручную, при условии, что ваша система сборки предоставляет способ интеграции ngAnnotate. - person Mark K Cowan; 23.10.2014