Heroku通过JS文件缩小打破了我的Rails + Angular.js应用程序

Heroku breaking my Rails + Angular.js app via JS file minification

本文关键字:Rails 我的 Angular 应用程序 js JS 通过 文件 缩小 Heroku      更新时间:2023-09-26

我在Heroku上有一个带有Angular.js的全新Rails 4.2.0应用程序,我有以下Angular.js控制器:

angular.module("CarDealer.controllers",[]).controller('carsController', function ($scope, carDealerAPIservice) {
  $scope.nameFilter = null;
  $scope.carsList = [];
  carDealerAPIservice.getCars().success(function (response) {
    $scope.carsList = response;
  });
});

在我看来:

<div class="row" data-ng-controller="carsController">
  <div class="row">
    <div class="col-md-4">
      <input type="text" ng-model="nameFilter" placeholder="Find vehicle..." class="form-control", autofocus="true"/>
    </div>
  </div>
  <ul data-ng-repeat="car in carsList | filter: nameFilter">
    <li>{{ car.model_name }} - {{ car.year }} </li>
  </ul>

但是当我打开页面时,没有任何呈现,我的控制台中有以下内容:

错误: [$injector:unpr] 未知提供程序: 电子提供程序 <- e <- 汽车控制器

在开发模式下一切正常,但在生产模式下,我发现自己遇到了这个问题。

我能做些什么来克服这种情况?我尝试禁用资产压缩,但没有成功。

提前致谢

为了避免缩小源的问题,请始终使用以下语法注入依赖项:

controller('carsController', ['$scope', 'carDealerAPIservice', function ($scope, carDealerAPIservice) { 
//code
}]);

Angular 文件在使用资产管道缩小时会搞砸,除非您使用特殊的数组语法来处理依赖注入中的字符串。在 rails 中执行此操作的最简单方法是添加 ng 注释 gem,然后您不必修改代码。另一种选择是关闭丑化:

# config/environments/***.rb
config.assets.js_compressor = Uglifier.new(mangle: false)

您的代码在开发模式下工作,因为它没有被缩小。

相关文章: