【问题标题】:angular.bootstrap seems to break when uglyfiedangular.bootstrap 在丑陋的时候似乎坏了
【发布时间】:2015-05-31 21:43:52
【问题描述】:

我有以下代码,在编译时我运行了 ngAnnotate 和 uglify

angular.bootstrap(navWrap, ['my.navbar']);

现在我知道这有点不合常规,但在不缩小时它可以工作。但是,当我尝试缩小它会导致提供程序未找到异常。

this is a similar question 只是它建议使用 ngMin (ngAnnotate) 我已经在做。如果我关闭重整,那么一切正常,但这似乎是个坏主意。

如果我只是在标签中更改为 ng-app,它就可以正常工作。有什么想法吗?

【问题讨论】:

    标签: angularjs uglifyjs


    【解决方案1】:

    ng-annotate 不可能检测到所有需要注入注解的片段。例如路由中使用的解析属性不会自动注释:

    app.config(function ($routeProvider) {
      $routeProvider.when('/', {
        templateUrl: 'home.html',
        controller: 'HomeCtrl',
    
        resolve: {
    
          // This needs annotations when minimized
    
          myArgument: function(myService) {
            return myService.getMyArgument();
          }
        }
    
      }).otherwise({
        redirectTo: '/'
      });
    });
    

    所以你可以自己注释它......:

    resolve: {
       // This needs annotations when minimized
    
      myArgument: ['myService', function(myService) {
        return myService.getMyArgument();
      }]
    }
    

    ...或者尝试用“ngInject”标记它,这应该有助于 ng-annotate 定位需要注入的函数:

    resolve: {
       // This needs annotations when minimized
    
      myArgument: function(myService) {
        "ngInject";
        return myService.getMyArgument();
      }
    }
    

    【讨论】:

    • 那么这与 angular.bootstrap 有什么关系呢?这是否意味着我需要将其应用于所有模块?为什么它看起来像 ng-app 一样好用?
    • 如果模块在一个 JS 文件中(使用 ngAnnotate 缩小),而另一个使用资产管道或其他方式缩小,这会如何?
    • 我不太确定为什么 ng-app 在您的情况下有效而引导程序无效。您有多个自定义模块吗?您可以尝试一一引导它们以找到问题发生的位置。如果您同时删除引导程序和ng-app,您还会遇到异常吗?将文件分开或将它们压缩在一个缩小的文件中应该没有任何区别。
    • 试图解决这个问题,真正的问题是它们相互关联。我确实设法注释掉所有连接并独立加载它们,但是,每个连接似乎都以完全相同的方式失败。我现在正在尝试收集更多信息。我们编译成一个大 JS,所以调试有点困难。
    猜你喜欢
    • 1970-01-01
    • 2010-11-17
    • 1970-01-01
    • 2010-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多