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.

Author: Community, 2013-12-03

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

 45
Author: m59,
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