web-dev-qa-db-ja.com

Javascriptエラー不明なプロバイダー:tProvider <-t after Rails minification Angularjs

私のRailsアセットのコンパイル時にアセットの拡大をオンにした後、アプリが機能しません。Angularコントローラーをブラケット表記を使用するように変換すると、次のエラーが発生します。これをデバッグする方法はありますか?

コンパイルされたapplication.js https://Gist.github.com/jianbo/6665161

JSエラー

Error: Unknown provider: tProvider <- t
at Error (<anonymous>)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21665
at Object.i [as get] (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20671)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21753
at i (localme:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20671)
at n (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:20805)
at Object.r [as instantiate] (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:21447)
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:818:604
at me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:28889
at r (me:3001/assets/application-4f6cd4e170fc6ce5d181d869af318557.js:817:8277) application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$broadcast application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
l application-4f6cd4e170fc6ce5d181d869af318557.js:818
l application-4f6cd4e170fc6ce5d181d869af318557.js:818
(anonymous function) application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$eval application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$digest application-4f6cd4e170fc6ce5d181d869af318557.js:818
r.$apply application-4f6cd4e170fc6ce5d181d869af318557.js:818
r application-4f6cd4e170fc6ce5d181d869af318557.js:818
m application-4f6cd4e170fc6ce5d181d869af318557.js:818
v.onreadystatechange application-4f6cd4e170fc6ce5d181d869af318557.js:818
19
user1883793

このエラー自体はAngular 't'に何を注入するかわからないことを示しています。つまり、 't'はどこかにある注入の1つの縮小名である必要があります。

縮小前に機能するが、縮小後に機能しない場合は、最小セーフ注入方法を使用していない場所で問題が発生している必要があります。

私はあなたがしていることすべてがminsafeであること、そしてあなたがangular.js自体の非minsafeバージョンを縮小しようとしていないことを確認したいと思います。自分自身を縮小するのではなく、常にangularパッケージに含まれる.minを使用してください(または、自分自身を縮小したい場合は、それがminsafeバージョンであることを確認してください)。

これは、コントローラーをminsafeにする例です。以下はminsafeではありません:

angular
    .module('myModule')
    .controller('MyCtrl', function($scope, myService) { 
        //your non-minsafe controller 
    });

それをminsafeにするために、注入したいもので始まり、同じ順序の引数で関数呼び出しで終わる配列に関数呼び出しをカプセル化します。

angular
    .module('myModule')
    .controller('MyCtrl', ['$scope', 'myService', function($scope, myService) { 
        //your minsafe controller 
    }]);
48
Mike Driver

Gem hiravgandhi/angularjs-Railsでも同じ問題が発生します

Config/environment/production.rbの設定を変更することで、本番環境でのミニフィケーションをオフにすることができました。

config.assets.js_compressor = Uglifier.new(mangle:false)

Hiravgandhi/angularjsでRails 4.0.2アプリを使用する-gemのインストール手順の指示に従って、Railsgemを使用します。

12
Jason FB

同じ問題が発生しましたが、問題は.controller呼び出しではなく、.configにあり、縮小化しても安全ではないことがわかりました。

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

app.config(function(RestangularProvider) {
    RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
    RestangularProvider.setBaseUrl('http://myapi.com/api/v1');
});

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

app.config(['RestangularProvider', function(RestangularProvider) {
    RestangularProvider.setDefaultHeaders({'Content-Type': 'application/json'});
    RestangularProvider.setBaseUrl('http://myapi.com/api/v1');
}]);
7
Patrick Cho

私はangular-blockUIモジュールで同様の問題を抱えています。WebEssentialsバンドルに含める代わりに、ロードする個別のものとしてそのファイルの事前に縮小されたバージョンを使用する必要があるかもしれません。 Bowerを介して取得するコードの中には、バンドルとミニファイの準備がまったく整っていないものがあります。

0