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'] 
  • Integrar Grunt / Gulp y Livereload al server Apache existente que sirve PHP / Zend
  • Grunt Browserify - require.resolve no es una function
  • grunt requirejs ignora las routes de mi mainConfigFile
  • Excluir subrayado de un proyecto que lo usa (browserify)
  • sourceMapRootpath para tener maps de origen usando LESS
  • Grunt (nodo) - ¿Cómo mostrar las tareas disponibles?
  • Grunt imagemin error: No se puede leer la propiedad 'contents' de undefined
  • Grunt.js: la tarea de carga provoca TypeError: el object no es una function
  • Javascript tiene muchos buenos JS marco (como Node.js AngularJS Vue.js React.js) es el mejor lenguaje de script.