0

ミニファイしたい Angular.js アプリケーションがあります。

まず、注釈とミニフィケーションを自動的に処理するために、特定の gulp パイプラインをセットアップしました。

暗黙的な注釈がどの程度うまく機能するかを確認するために、ngAnnotateを使用して注釈を追加し、逃したすべての注釈をキャッチするためにstrict-diオプションを指定してアプリケーションを実行しました。次に、見つけたすべての欠落している注釈にコメントのヒントを追加しました。その後、すべてがうまく機能しngAnnotate、コードに自動的に注釈が付けられ、strict-di警告はなくなりました。

ただし、 UglifyJS2 を使用して実際にコードを縮小すると、一部のサービスが見つからないと言ってアプリケーションを起動できません。

実際のエラー メッセージは次のとおりです。

状態変更エラー エラー: [$injector:unpr] 不明なプロバイダー: tProvider <- t

mangle: falseにオプションを追加すると、正常にUglifyJS2動作します。

— 問題は、どうやって犯人を見つけ、なぜ犯人をstrict-di捕まえられないのかということです。

4

1 に答える 1

0

わかった!私はついにこの問題を解決することができました。

効率的に解決するのに役立つ戦略をここに投稿します。

ストラテジー

私はかなり大きなコード ベースを持っていて、すべてが 1 つの JavaScript ファイルにありました。すべての依存関係、サードパーティ、およびローカルが記載されており、gulp プラグインにバンドルされています。

私が最初にしたことは、コードを 2 つのファイルに分割することでした:vendor.jsapplication.js. すべてのサードパーティの依存関係を最初のファイルに移動し、すべてのローカルの依存関係を 2 番目のファイルに残しました。その後、縮小されたものとapplication.js縮小されていないものでアプリケーションを実行しようとしvendor.jsました。この簡単なトリックにより、問題が実際にはサードパーティのコードにあり、アプリケーションにあると判断できませんでした。

その時点で 34 の外部依存関係が指定されていたので、ここでも 2 つのファイルvendor.jsを作成し、vendor-cleared.js依存関係を最初のファイルから 2 番目のファイルに (半分ずつ) 移動し始めました。今回は、2 番目のものをコンパイルし、最初のものは未圧縮のままにしました。数回繰り返した後、適切に注釈が付けられていない問題のあるサードパーティ ライブラリを見つけました。

私はそれを修正し、すべてを元に戻しましたapplication.js。その後、私のアプリは問題なく動作するようになりました。


この単純なアイデアが、大きなコード ベースを適切に注釈が付けられたものに変換し、最終的に縮小するのに役立つことを願っています!

その後、新しい依存関係を追加するときに縮小が適切に機能するかどうかを確認してください。そして、常に使用することを忘れないでくださいstrict-di。常に機能するわけではありませんが、かなりうまく機能します。

于 2016-03-31T19:49:27.500 に答える