【问题标题】:Rails 3 + angularjs + minification does not work in production: Unknown provider: eProviderRails 3 + angularjs + minification 在生产中不起作用:未知提供者:eProvider
【发布时间】:2012-11-07 17:00:13
【问题描述】:

我已经按照我能找到的所有说明来修复缩小,例如

var MyController = function(renamed$scope, renamedGreeter) {
...
}
MyController.$inject = ['$scope', 'greeter'];

someModule.factory('greeter', ['$window', function(renamed$window) {
...;
}]);

然而 angular 仍然拒绝工作。它总是抛出错误“未知提供者:eProvider”

这是我让它工作的两次尝试...有人可以帮忙吗?

https://github.com/jemminger/angular-test1

https://github.com/jemminger/angular-test2

他们已经对资产进行了预编译,并且将开发模式配置为生产模式,因此您应该能够“rails s”看到它(不)工作。

【问题讨论】:

  • 根据自己的目标,一种可能的解决方案是将缩小器缩减为破坏性较小的优化。在uglify 的情况下,您可以使用mangle: false 配置,并且仍然可以通过删除空格节省相当多的千字节。

标签: ruby-on-rails angularjs assets production minify


【解决方案1】:

请记住,还要在指令中的控制器上使用 DI。花了我几个小时... CS 示例:

错误:

controller: ($scope) ->
  $scope.closeModal = ->
    ModalService.close()

右:

controller: ["$scope"
  ($scope) ->
    $scope.closeModal = ->
      ModalService.close()
]

【讨论】:

  • 如果它不依赖读者使用您选择的脚本解决方案,这将更有帮助。
【解决方案2】:

确保将 DI 模式应用于需要在模块中注入的 ALL 函数定义。很容易错过一个。如果您使用的是 routeProvider、工厂、服务等,它们都需要应用 DI 模式。我最终部署了多次,然后才全部抓到:P

【讨论】:

  • '很容易错过。'确切地。您甚至必须将模式应用于指令中定义的控制器!我浪费了一个美好的小时来寻找这个错误。
【解决方案3】:

找到了!他们从未说过将注入修复程序也应用于服务......解决方案是改变这一点:

angular.module('itemServices', ['ngResource']).
    factory('Item', function($resource){
      return $resource('items/:item_id.json', {}, {
        query: {method:'GET', params:{ item_id: 'all' }, isArray:true}
      });
    });

对此:

angular.module('itemServices', ['ngResource']).
    factory('Item', ['$resource', function($resource){
      return $resource('items/:item_id.json', {}, {
        query: {method:'GET', params:{ item_id: 'all' }, isArray:true}
      });
    }]);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-04-28
  • 2016-01-11
  • 2015-06-18
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 2018-06-14
相关资源
最近更新 更多