我在使用 typescript 和 angularjs 注入(inject)自定义服务时收到此错误。生成的 typescript 转译 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)
参见 plunker: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”,你的代码仍然试图注入(inject)“LocationService”,这显然不存在。
一个选项可能是使用类似 ngMin 或 ngAnnotate 的东西(我还没有尝试过这些),但我个人的偏好是使用内联数组符号来声明依赖关系来避免这个问题。
关于javascript - Angularjs、Typescript、Uglify 无法实例化模块 myApp .... 未知提供者 : a,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25078410/