この問題の原因となったソース コード内の場所をどのように見つけたのか知りたいのですが、その後手動で問題を見つけることができました。
.controller()
アプリケーション モジュールで呼び出しを使用する代わりに、グローバル スコープで宣言されたコントローラー関数がありました。
すると、次のようなものがありました。
function SomeController( $scope, i18n ) { /* ... */ }
これはAngularJSでは問題なく機能しますが、マングリングで正しく機能させるには、次のように変更する必要がありました:
var applicationModule = angular.module( "example" );
function SomeController( $scope, i18n ) { /* ... */ }
applicationModule.controller( "SomeController", [ "$scope", "i18n", SomeController ] );
さらにテストを重ねた結果、問題を引き起こしたコントローラのインスタンスがさらに見つかりました。これは、それらすべてのソースを手動で見つけた方法です。
まず、uglify オプションで出力の美化を有効にすることがかなり重要だと考えています。私たちの単調なタスクの意味は次のとおりです。
options : {
beautify : true,
mangle : true
}
次に、DevTools を開いた状態で、Chrome でプロジェクト Web サイトを開きました。以下のようなエラーがログに記録されます。

関心のあるコール トレースのメソッドは、矢印でマークしたメソッドです。これはproviderInjector
にありinjector.js
ます。例外をスローするブレークポイントを配置する必要があります。

アプリケーションを再実行すると、ブレークポイントがヒットし、コール スタックをジャンプできます。"不正なインジェクション トークン" 文字列から認識できる からのinvoke
呼び出しinjector.js
があります。

locals
パラメータ(私のコードでマングルされd
ています)は、ソース内のどのオブジェクトが問題であるかについてかなり良いアイデアを提供します:

grep
ソースをざっと見てみると の多くのインスタンスが見つかりますがmodalInstance
、そこからソース内でこのスポットを見つけるのは簡単でした:
var ModalCreateEditMeetingController = function( $scope, $modalInstance ) {
};
次のように変更する必要があります。
var ModalCreateEditMeetingController = [ "$scope", "$modalInstance", function( $scope, $modalInstance ) {
} ];
変数が有用な情報を保持していない場合は、スタックをさらに上にジャンプして、invoke
追加のヒントが必要な呼び出しをヒットする必要があります。

再発防止
うまくいけば問題が見つかったので、今後これが再び発生しないようにする最善の方法について言及する必要があると思います.
明らかに、どこでもインライン配列注釈を使用するか、(好みに応じて)$inject
プロパティ注釈を使用して、将来それを忘れないようにすることができます。その場合は、厳密な依存性注入モードを有効にして、このようなエラーを早期にキャッチしてください。
気を付けて!Angular Batarang を使用している場合、StrictDI は機能しない可能性があります。Angular Batarang は注釈なしのコードをユーザーのコードに挿入するためです (悪い Batarang!)。
または、 ng-annotateに任せることもできます。この領域で次のようなミスが発生する可能性が大幅に減るため、これを行うことを強くお勧めします。
- DI 注釈がありません
- DI 注釈が不完全です
- DI 注釈の順序が間違っている
注釈を最新の状態に保つのは面倒なことであり、自動的に実行できる場合はそうする必要はありません。ng-annotate はまさにそれを行います。
grunt-ng-annotateとgulp-ng- annotateを使用して、ビルド プロセスにうまく統合する必要があります。