What does Error: [$injector:unpr] Unknown provider: tProvider <- t <- myActiveLinkDirective mean?

Solution 1:

I posted the generic answer below before I had a chance to see the rest of the code you posted. Yes, indeed you have some controllers and directives that use inference. Change your code to use inline annotation, the $inject property; or less intrusively, use a tool like ng-annotate (thanks @deitch for the pointer).


If you're minifying your code, don't use the inference style of dependency annotation. Use the $inject property or use inline annotation. See https://docs.angularjs.org/api/auto/service/$injector.

Example

Don't rely on inference:

function ($scope, $timeout, myFooService) {
}

Use either inline annotation:

[ '$scope', '$timeout', 'myFooService', function ($scope, $rootScope, myFooService) {
}]

Or the $inject property:

function MyFactory($scope, $timeout, myFooService) {
}

MyFactory.$inject = [ '$scope', '$timeout', 'myFooService' ];

This is because the inference flavour relies on the argument names of the function to be preserved (and match to existing services). You might be losing the original names during minification.

Solution 2:

Set mangle: false.

This setting solved same problem that I had.

var $ = require('gulp-load-plugins')();

$.uglify({
  mangle: false,
  compress:true,
  output: {
    beautify: false
  }
});