【问题标题】:Grunt js uglify fails - console Error: Unknown provider: aProvider <- aGrunt js uglify 失败 - 控制台错误:未知提供者:aProvider <- a
【发布时间】:2016-05-02 18:40:10
【问题描述】:

我很新,正在尝试构建一个应用程序它工作正常

现在我正在尝试缩小文件:
错误:未知提供者:aProvider

uglify: {
        my_target: {
          files: {
            'app/output/output.js': [
                'app/js/angular-ui-router.js',
                'app/js/angular-animate.js',
                'app/js/packery.pkgd.js',
                'app/js/app.js',
                'app/js/services.js',
                'app/js/controllers.js',
                'app/js/directives.js'
            ]
          }
        }
      }

1) 如何解决这个问题?

2) 一些博客示例建议在使用 uglify 之前使用 grunt-contrib-concat - 为什么?

第二个问题让我很困惑

编辑

看完ng-annotate 它们必须使用数组语法编写。

我的代码结构是这样的

var app = angular.module('bigApp', []);

app.controller('mainController', ['$scope', function($scope) {
    $scope.message = 'HOORAY!'; 
}]);

但没有解决错误'Unknown provider: aProvider

【问题讨论】:

  • 说真的,谷歌搜索“角度缩小”。有几十页,包括在官方文档中,解释了如何使 Angular 代码最小化。使用 ng-annotate。
  • @JBNizet 感谢您的信息分享,我编辑了我的问题,请您检查一下
  • 首先,我不会缩小 angular-ui-router 和 angular-animate:这两个提供了经过测试并且工作正常的缩小版本,您应该按原样重用它们(或按将它们与您自己的缩小文件连接起来)。第二:你误读了 ng-annotate:它的重点是让你编写简单的代码而不使用丑陋的数组语法。 ngannotate 将在缩小之前使用这种丑陋的数组语法重写您的代码,作为构建的一部分。第三,如果您仍然有这个问题,并且您只是缩小了代码,那么这意味着您在某处缺少数组语法。

标签: angularjs gruntjs grunt-contrib-uglify grunt-contrib-concat


【解决方案1】:

在对文件进行 uglify 之前应将文件连接起来,原因是 uglify 会更改函数、控制器等的名称,当您像示例中那样执行此操作时,文件将在整个应用程序的上下文之外进行 uglified并且无法正确找到重命名的函数。为了正确地丑化 Angularjs,你也应该在 grunt 中使用 ng-annotate,除非你已经在控制器/服务/工厂中使用了以下符号

需要 ng-annotate

.controller('myController', function (serviceA, factoryB, filterC){
  //something fancy
})

不需要 ng-annotate

.controller('myController', [ 'serviceA', 'factoryB', 'filterC', function (serviceA, factoryB, filterC){
  //something fancy
}])

【讨论】:

  • 感谢您的信息分享,我编辑了我的问题,请您检查一下
猜你喜欢
  • 2012-10-07
  • 2014-06-01
  • 2014-03-08
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多