EC2 本番インスタンスで突然このエラーが表示されます。新しいリリースをデプロイしたところ、エラーに気付きました。その後、以前のバージョンをデプロイしましたが、問題は解決しませんでした。以前に動作していたコミットがデプロイされていても、エラーが表示されます。
2 に答える
エラーは、縮小が原因でした。インジェクションには、暗黙的および明示的な 2 つの構文があります。
- 暗黙的な注入は、変数名によって何を注入する必要があるかを推測します。
some_module.module_component(function(myService) {...
それは myService という名前のものを探して挿入しますが、変数名が「e」のようなものに縮小されている場合、「e」という名前のサービスを見つけることができないため、angular は eProvider がないと文句を言います。
- 明示的なインジェクションでは、文字列を使用してインジェクションを指定します。文字列は決して縮小されません。
some_module.module_component(["myService", function(myService) {...
これは、myService という名前のものを探して myService 変数に割り当てます。変数名が変更された場合でも、「e」という名前の変数に割り当てられたとしても、myService を探すことがわかっているため、問題ではありません。 .
問題は解決されました。ソース コードの詳細に注意を払う必要があります。ブラウザ コンソール エラーからコード内の特定の行を指すのは簡単ではないため、または他の人がブラウザ開発者のブレーク ポイントによるデバッグについて説明した方法です。ツール。
このようなエラーが発生した場合は常に、次のように AngularJS エラーの情報を分析する必要があります。
Unknown provider: eProvider <- e <- $exceptionHandler <- $rootScope
不明なプロバイダーは、使用している angularjs コードの縮小バージョンが原因であると思われるインジェクションの問題があることを意味します。縮小とは、コンパイルされた angularjs ファイルが、Angular モジュール コンポーネント (コントローラー、サービス、ファクトリー、ディレクティブ、デコレーターなど) の 1 つに挿入したサービスまたは変数の名前を変更したことを意味します。名前の変更 (例: $delegate から e へ) は、コンパイルされた縮小バージョンで問題を引き起こす可能性があります。はい、問題を解決するのにあまり役立ちませんが、これを理解していることを確認する必要があります.
eProvider <- eは、注入されたオブジェクトが取得した縮小された名前であり、コードベースで検索しようとしないため、意味がありません。それは役に立ちません。
$exceptionHandler :これが最大のヒントです。このサービスまたはオブジェクトを使用するコンポーネントを含むモジュールを見つける必要があります。それらの1つが問題を引き起こしています。このような問題を引き起こしているのは、次のようなものです。
some_module.module_component(function(myService) {...
それを修正するには、次のようになります。
some_module.module_component(["myService", function(myService) {...
展開されたリビジョンを以前に機能していたリビジョンに戻した場合でも、なぜ問題が発生するのか、まだ混乱しています。EC2 インスタンスでコンパイルされた JS ファイルが元に戻されていないようです。
これが役立つことを願っています。