Error after Minification of angular js. Error: [$injector:unpr] Unknown provider: eProvider <- e <- makeErrorsDirective

后端 未结 4 1408
一整个雨季
一整个雨季 2021-01-05 00:48

I used Gulp to minify my entire js files. Once minified I got an error like the following:

[$injector:unpr] Unknown provider: eProvider <- e <- makeE         


        
相关标签:
4条回答
  • 2021-01-05 00:50

    Angular doesn't always work well with minification.

    If you as an example write this:

    angular.controller("MyCtrl", function ($scope) {...});
    

    Then the $scope would be changed to something meaningless during minification.

    If one instead changes that to:

    angular.controller("MyCtrl", ["$scope", function (s) {...}]);
    

    Then it doesn't matter what the first argument in the function is called (here s), as long as the string is "$scope".

    See this: https://docs.angularjs.org/tutorial/step_05#a-note-on-minification in the documentation for more details.

    If you want more help, you have to post the code in question, not just the error.

    0 讨论(0)
  • 2021-01-05 00:55

    I had this same issue, even when I use gulp-ng-annotate, but it only happens occurs for $stateProvider and ngDialog resolves:

    $stateProvider
      .state('orders', {
        url: '/orders',
        templateUrl: 'templates/orders.html',
        controller: 'OrdersController as vm',
        resolve: {
          authenticate: function (Auth) {
            return Auth.getAuthResolve();
          }
        }
      });
    

    Resolve needs to be written like this:

        resolve: {
          authenticate: ['Auth', function (Auth) {
            return Auth.getAuthResolve();
          }]
        }
    

    So it feels that ng-annotate does not inject the array into resolves, but only to controller/service/factory constructors.

    0 讨论(0)
  • 2021-01-05 01:02

    I had an issue using angular-ui-router-title. After changing

    $titleProvider.documentTitle(function($rootScope) {
        return $rootScope.$title + ' my title';
    });
    

    to

    $titleProvider.documentTitle(['$rootScope', function($rootScope) {
        return $rootScope.$title + ' my title';
    }]);
    

    the error doesn't appear anymore.

    0 讨论(0)
  • 2021-01-05 01:03

    There is a reason why you have to inject services and controller in string array.

    if you want to inject scope to controller, you have to use

    angular.module('yourApp')
        .controller('yourController',['$scope',function($scope){
        }]);
    

    Minification will change the variable names and if you don't use that array of strings while injecting services or controllers, it will be like

     angular.module('yourApp')
        .controller('yourController',function(e){
        });
    

    So, angular will not be able to understand what 'e' stands for, hence the error. Always remember that the order is also important.

    .directive('mhDashboard', ['$http','authService','apiService', function ($http, authService, apiService) {
        return {
            restrict: 'EA',
            scope: {
                name: '@',
                dash: '@',
                report: '@',
                disname: '@',
                disdesc: '@',
                distot: '@'
            },
            templateUrl: 'views/dashboard/dashboard-direc.html',
            link: function (scope, element, attr) {
                scope.linkChk = scope.name;
                switch (scope.linkChk) {
                    case 'Shipped This Week':
                        scope.url = 'erp/JobShipmentList/PostCpsVwShipmentCount';
                        scope.shipstatus = "Departure";
                        scope.period = "ThisWeek";
                        scope.basicfilter = "Open";
                        scope.linkName = "Shipments";
                        scope.linkDesc = "Shipped This Week";
                        break;
    }
    }])
    
    0 讨论(0)
提交回复
热议问题