La minificación angular con grunt da como resultado el error 'Error al crear una instancia del module'

Conozco la configuration de un controller, service, model, etc. para prepararse para la minificación. Tengo aproximadamente 20 controlleres, models y services como files individuales y quiero minimizarlos y combinarlos en un solo file JS para producción.

Para tener una idea de cómo tengo estos files configurados, aquí hay un ejemplo:

VforumJS.controller('MainController', ['$scope', '$location', '$sce', 'MainModel', 'LogModel', 'MainDebug', 'timecode', 'Idle', function($scope, $location, $sce, MainModel, LogModel, MainDebug, timecode, Idle) { ... }]); 

Después de la minificación, obtengo el error

 Failed to instantiate module VforumJS due to: Error: [$injector:unpr] http://errors.angularjs.org/1.4.1/$injector/unpr?p0=a 

Si hago clic en el enlace de error, dice Unknown provider: a

Aquí es donde se crea mi module

 var VforumJsConfig = function($routeProvider, $locationProvider, localStorageServiceProvider) { localStorageServiceProvider.setPrefix('vforumdesktop'); $locationProvider.html5Mode(true); $routeProvider .when('/', { ... }) .otherwise({ ... }); }; var VforumJS = angular.module('VforumJS', ['ngRoute','LocalStorageModule', 'ngTouch', 'ui-rangeSlider','base64','ngIdle']) .config(['$routeProvider', '$locationProvider', 'localStorageServiceProvider', VforumJsConfig]) .constant('LogTypes', { LOGIN: 1, IDLE_LOGOUT: 2, MANUAL_LOGOUT: 3, VFORUM_OPEN: 4, VFORUM_CLOSE: 5 }) .constant('SendLogs', false) .constant('MainDebug', true); 

¿Acaso no estoy haciendo la preparación de minificación adecuada en el código anterior donde se creó el module?

Aquí está mi Gruntfile.js

 'use strict'; module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), uglify: { all_src: { options: { sourceMap: true, sourceMapName: 'source.map' }, src: 'resources/js/**/*.js', dest: 'composite.all.min.js' } } }); grunt.loadNpmTasks('grunt-contrib-uglify'); grunt.registerTask('default', ['uglify']); }; 

2 Solutions collect form web for “La minificación angular con grunt da como resultado el error 'Error al crear una instancia del module'”

Tu .config es definitivamente uno de los problemas. Verifique dos veces y asegúrese de que esté inyectando un service / proveedor en todas partes del código que está utilizando la minificación en línea.

Esto es lo que una configuration inyectará un proveedor (solo $ logProvider para este ejemplo) después de la minificación:

 .config(function(a){ console.log("Never gets here, but a is", a); }) 

Cuando en realidad debería verse así:

 .config(['$logProvider', function(a){ console.log("a is", a); }]) 

Aquí hay un codepen: http://codepen.io/troylelandshields/pen/xGjKGV

Su problema es la línea VforumJsConfig

 var VforumJsConfig = function($routeProvider, $locationProvider, localStorageServiceProvider) 

Los parameters de function se minifican y angular no sabe de dónde inyectarlos. Debe proporcionarlos como cadenas (al igual que sus otras funciones), ya que las cadenas no se verán alteradas durante la minificación.

De los documentos: https://docs.angularjs.org/tutorial/step_05#a-note-on-minification

Por lo tanto, deberá agregar después de la definición de VforumJsConfig:

 VforumJsConfig.$inject = ['$routeProvider', '$locationProvider', 'localStorageServiceProvider'] 
  • Prueba de la aplicación Big JS, evitando múltiples files karma.conf.js
  • message: 'Token inesperado: punc (.)', mientras usa uglify en gruñido
  • ¿No se puede ejecutar la tarea `watch` de Grunt?
  • Grunt connect-modrewrite no funciona
  • Dividir Gruntfile
  • Excluir subrayado de un proyecto que lo usa (browserify)
  • grunt-winetworkingep no inyecta js libs con dot en el nombre de la carpeta lib
  • Error al enumerar el error de las tareas de Grunt en WebStorm
  • ¿Debo usar angular-seed o yeoman para una nueva aplicación angular?
  • ¿Cómo hace reference Ember.js a las templates de manubrios precomstackdos de Grunt.js?
  • ¿Cómo leer el file de configuration json dentro del module angular?
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.