javascript - Angularjs、Typescript、Uglify 无法实例化模块 myApp .... 未知提供者 : a

标签 javascript angularjs dependency-injection typescript

我在使用 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/

相关文章:

javascript - 获取 div 在层次结构中的位置

javascript - 我怎样才能将这个功能合并在一起

javascript - 如何在angularjs中制作动态侧边栏

entity-framework - 使用 Entity Framework 、依赖注入(inject)、工作单元和存储库模式在运行时注入(inject)/管理更改连接字符串

javascript - 如何知道每 3 分钟的窗口 href 值

javascript - 新 web 项目上 javascript 配置的最佳实践

javascript - 使用javascript的multiplyOddByTwo函数

javascript - ng-click 错误 : [$parse:syntax] Syntax Error: Token 'Object' is unexpected, 期待 []]

scala - 在对象中注入(inject)依赖项

c# - 使用 Simple Injector 将开放通用类型注册为回退