Error angular "Proveedor desconocido" después de la minificación con Grunt Build en la aplicación Yeoman
Estoy teniendo problemas con grunt build
en una aplicación Angular generada por Yeoman, usando Coffee y Slim, con todas las bibliotecas actualizadas. (La aplicación se generó hace unos días con el generador más reciente.)
grunt build
y grunt server
ambos funcionaron bien inicialmente. Pero después de unos días de desarrollo usando grunt server
, descubrí que grunt build
había dejado de funcionar por completo.
Hubo algunos problemas diferentes que arreglé. El más grande fue que tuve que abandonar Slim por completo para mi índice archivar y usar HTML directo, ya que grunt build
estaba eliminando inexplicablemente el 80% del archivo de índice cuando se publicó en /dist
.
Desafortunadamente, después de resolver casi todo, comencé a recibir este error en una de mis directivas Angulares:
Error no capturado: Proveedor desconocido: aProvider
El problema parece estar en uglify. Creo que posiblemente podría ser el mismo problema reportado aquí, pero no estoy absolutamente seguro. Probé un número un número de soluciones, pero lo único que ha funcionado para mí ha sido generar manualmente archivos js limpios desde mi coffeescript, copiar los archivos en /dist
, y luego escribir las rutas en dist/index.html
.
Obviamente eso no es óptimo. Estoy seguro de que hay una manera más ordenada de hacerlo en Grunt (probablemente eliminando la minificación por completo del proceso de compilación, como lo hizo ese otro usuario en el enlace anterior), pero soy nuevo en él y aún no he descubierto cómo hacerlo. De cualquier manera, sería una solución alternativa.
Mi Gruntfile es bastante básico: solo he agregado grunt-connect-proxy, grunt-contrib-sass y grunt-slim al archivo predeterminado. De hecho, traté de traer un Gruntfile limpio y recién generado, pero no se construyó mejor.
La directiva que está fallando está abajo. El error realmente aparece justo en la primera línea del controlador, $scope.showInput = false
. Lo que es frustrante es que todo funciona muy bien en grunt server
. Sin embargo, en el momento en que construyo, se desmorona por completo.
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: "&"
(La plantilla no es realmente importante. Solo tiene un ng-switch
que cambia usando $scope.showInput
.)
Si alguien tiene alguna sugerencia, se lo agradecería.
1 answers
Suena como el problema común de la dependencia de Angular en el nombre de los argumentos para la inyección de dependencias. Asegúrese de que cuando pase dependencias incluya los nombres de dependencias como cadenas para que Angular sepa qué inyectar después de la minificación (ya que los valores de las cadenas no se cambiarán en el proceso de minificación).
myApp.controller('myCtrl', ['$scope', '$http', function($scope, $http) {
}])
Desde Angular docs: Una nota sobre la minificación
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-12-08 00:40:18