У меня возникли проблемы с 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
.)
Если у кого-нибудь есть предложения, я был бы признателен.