Karma テスト ランナーの「起動」時間が非常に遅いことを経験していました。実行のプロファイリングを行った後、ソース マップの作成が最大の速度低下の原因であることに気付きました。
より具体的にはkarma-webpack
、プリプロセッサとして webpack を使用していることを考えると、カルマによってテスト ファイルがロードされるたびに、ソース マップを生成する webpack にフィードされます。
アプリとベンダー コードを分割/チャンクしていないことを考えると、各テスト ファイルは同じベンダー ソース マップ (インライン) を取得していました。
ファイルのソース マッピングが発生しないようにするだけで、これを修正できると思っていnode_modules/
ましたが、入力ソース/モジュール ファイルではなく、最終的なアセット ファイルに基づいて、ファイルをソース マッピングから除外することしかできないことに気付きました。
そこで、このプラグインがアプリとベンダー コードを別々のチャンクに自動的に分割することを発見しました (各ベンダー モジュールを手動でリストする必要はありません)。
それでも、Karma の実行中にこのエラーが発生し始めました。
ReferenceError: Can't find variable: webpackJsonp
これは、ベンダーとアプリのコードが別々のチャンクに分割されているという事実をカルマが認識していないため、files
オプションで構成されたコードのみが含まれているためだと確信しています (つまり、テストファイル自体であり、ベンダー ファイル)。
そのfiles
構成オプションは、各テスト ファイルが前処理される前に解析され、処理されるようです。つまり、オプションでベンダー チャンクを指定することはできないと思います。Karmafiles
は試行時にそれを認識しないためです。それを探す(早すぎる)。
私が見ることができる唯一の解決策は次のとおりです。
- ベンダーとアプリのチャンク ファイルの分離を処理できるように、Karma の実装方法を変更します。
- 使用して前処理する代わりに
karma-webpack
、アプリをテスト モードでビルドしてから、テスト ビルド ディレクトリの Karma を実行します (ベンダー チャンクが十分早く存在するようにします)。
私が見逃した解決策はありますか?
一般的な問題ではないように思われるのは奇妙だと思います。
編集 1
私はこれを見つけましたが、そこの人々はwebpack構成で複数のエントリポイントを使用することを提案しています(つまり、アプリ用とベンダー用)。vendor
これが Karma で機能するかどうか試してみますが、配列に何を入れたかを手動で追跡しなければならないという大きな欠点があります (私の意見では) 。つまり、パッケージをインストールするたびに、それをアレイに追加する必要があり、その逆も同様です。
編集 2
複数のエントリ ポイント (webpack 構成内) を使用しても、ソース マップ webpack プラグインを構成してベンダー ファイルを除外する前には機能しません (webpack-split-by-path
プラグインの場合はそうです)。
「最初にビルドしてからテストする」アプローチを実装してみます。