在将typescript与angularjs一起使用以注入自定义服务时,我收到此错误。生成的打字稿转译的JavaScript已通过uglify运行。如果不使用uglify进行部署,则该应用程序可以运行。
Uncaught Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:modulerr] Failed to instantiate module MyModule due to:
Error: [$injector:unpr] Unknown provider: a
http://errors.angularjs.org/1.2.21/$injector/unpr?...<omitted>...2)
请参阅“ punker”:http://plnkr.co/edit/mX7TCPAO3VycUp4Nw2Oy?p=preview
我知道它可以通过更改uglify选项来删除mangle而起作用,但我想保留mangle。
任何帮助将非常感激 :-)
最佳答案
原因是最小化用输入参数名称和函数名称代替。所以你的情况
var LocationService = (function () {
function LocationService($rootScope) {
$rootScope.foo = 123;
}
LocationService.prototype.log = function (msg) {
console.log(msg);
};
LocationService.$inject = ['$rootScope'];
return LocationService;
})();
被缩小到
var b=function(){function a(a){a.foo=123}...
a.$inject=["LocationService"]
因此,LocationService被重命名为“ b”,并且您的代码仍然尝试注入“ LocationService”,这显然不存在。
一种选择可能是使用ngMin或ngAnnotate之类的东西(我还没有尝试过),但是我个人的偏爱是使用内联数组表示法声明依赖项来避免此问题。
关于javascript - Angularjs,Typescript,Uglify无法实例化模块myApp…未知提供程序:,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25078410/