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

Angular Ошибка "Неизвестный поставщик" после переназначения с помощью приложения Grunt Build в приложении Yeoman

У меня возникли проблемы с grunt build в приложении, созданном Yeoman Angular, используя Coffee and Slim, со всеми современными библиотеками. (Приложение было создано всего несколько дней назад с помощью самого последнего генератора.)

grunt build и grunt server оба изначально работали нормально. Но через несколько дней разработки, используя grunt server, я обнаружил, что grunt build полностью перестало работать.

Было несколько проблем, которые я исправил. Самый большой из них заключался в том, что мне пришлось полностью отказаться от Slim для моего индексного файла и использовать прямой HTML, поскольку grunt build необъяснимо удалял 80% индексного файла, когда он публиковался на /dist.

К сожалению, после того, как я почти все решил, я начал получать эту ошибку в одной из моих директив Angular:

Непринятая ошибка: неизвестный поставщик: aProvider < - a

Проблема, кажется, в uglify. Я думаю, что это может быть та же проблема, о которой сообщалось здесь, но я не совсем уверен. Я попробовал ряд решений, но единственное, что сработало для меня, - это вручную создавать чистые файлы js из моего coffeescript, копировать файлы в /dist, а затем записывать пути в dist/index.html.

Очевидно, что это не оптимально. Я уверен, что в Grunt можно использовать более аккуратный способ (возможно, полностью исключая минимизацию из процесса сборки, как это сделал другой пользователь в ссылке выше), но я новичок в этом и еще не понял, как для этого. В любом случае, это будет обходным путем.

My Gruntfile довольно простой: я добавил только файл grunt-connect-proxy, grunt-contrib-sass и grunt-slim для файла по умолчанию. На самом деле, я попытался привести чистый, недавно созданный файл Grunt, но он не стал лучше.

Директива о том, что ошибка ниже. Ошибка на самом деле появляется в первой строке контроллера, $scope.showInput = false. Что расстраивает то, что все отлично работает в grunt server. В тот момент, когда я строю, он полностью разваливается.

myModule.directive "editable", ->

  controller = ($scope) ->
    $scope.showInput = false

    $scope.saveContent = -> 
      $scope.toggleContent()
      $scope.save()

  linker = (scope, element, attrs) ->    
    scope.toggleContent = -> 
      scope.showInput = not scope.showInput
      setTimeout((-> element.find('input').focus()), 100)

  return DDO = 
    restrict: 'E'
    controller: controller
    link: linker
    templateUrl: "template/editable.html"
    scope:
      editableType: "@"
      text: "="
      placeholder: "@"
      save: "&"

(Шаблон не очень важен. Он просто имеет ng-switch, который переключается с помощью $scope.showInput.)

Если у кого-нибудь есть предложения, я был бы признателен.

4b9b3361

Ответ 1

Похоже, что общая проблема Angular зависит от имени аргументов для инъекции зависимостей. Убедитесь, что когда вы передаете зависимости, в которые вы включаете имена зависимостей в виде строк, чтобы Angular знал, что нужно вводить после минимизации (поскольку значения строк не будут изменены в процессе минимизации).

myApp.controller('myCtrl', ['$scope', '$http', function($scope, $http) {

}])

Из Angular docs: Заметка о минимизации