リアクションアプリのwebpack 1からwebpack 2へのアップデートが完了しました。しかし、バンドルのサイズは〜30Kb増加しました。私は束のサイズが減少することを望んでいた、どのように私は木の揺れが働いたことを確認することができます。なぜそれが増えるのでしょうか?Webpack 2で木の揺れが働いているかどうかを確認する方法は?
6
A
答えて
1
0
TL; DR:バージョン2.3以降、webpackにはツリーが揺れることはありません。 UglifyJSを使用して未使用のコードを削除するだけです。
最初に、何がツリーシェーピングであるかを定義する必要があります。
Stackoverflowは「最新のjavascriptのデッドコード消去アルゴリズム」と定義しています。
ウェブパックは、ES2015モジュールのインポート/エクスポートがモジュールシステムの静的構造に依存していることを明確にしています。
ロールアップ(もともとは用語を一般化しています)も同様の説明があります。
したがって、未使用のESモジュールのエクスポートを静的に除外するという特定の定義を推論できます。
それでは、各モジュールは通常有する変換の段階を見てみましょう:
- バベルローダは、いくつかのモジュール形式のジャバスクリプトファイルであるエントリポイントを供給されます。バベルはあるとしてそれを残すの別のモジュール形式に変換することができますいずれか(
module: false
) - のWebPACKは、静的に(正規表現のいくつかの並べ替えを使用して)ファイルを解析し、インポートしたモジュールが見つかります
- バベル場合のWebPACKは(モジュール形式を変換しますか
- インポートされたモジュールがエントリポイントになり、すべてのモジュールがロードされ、変換された後に、バベルローダー
- に移動した後、uglifyは結果バーンルを処理して削除します(訳注:未使用コード(
unused: true
)
uglifyは未使用のエクスポートを削除できますが、実際にはESモジュールの構文に依存していないことがわかりました。これは単なる一般的なデッドコードの除去であるため、「ツリーシェイキング」として定義することはできません。
ウェブパックにツリーが揺れているかどうかを確認するにはどうすればよいですか?
- まず、すべてのコードはESモジュール形式でなければなりません。
- すでに別の回答で言及されているように、Uglifyを無効にする必要があります。
- モジュールがそのフェーズで使用されているかどうかわからないので、ベルベルのモジュール変換も無効にする必要があります。
そしてWebPACKのは、実際にアルゴリズムを振ってツリーを実装している場合、今、私たちは、このエントリポイントのバンドルサイズを見て、それを確認することができます:WebPACKのは数十あるべき結果を振ってツリーを持っていない場合は
import { keyBy } from 'lodash-es'; // lodash is in ES module format
console.log(keyBy([{ key: 'value' }], 'key'));
キロバイト。そうでない場合は、半メガバイト以上になります。
関連する問題
- 1. サービスファブリックで稼働しているかどうかを確認する方法
- 2. 木が "等しい"かどうかを確認する
- 3. 木がBSTであるかどうかを確認する
- 4. HealthKitが承認されているかどうかを確認する方法
- 5. バックボーンビューがレンダリングされているかどうかを確認する方法は?
- 6. window.confirm()がサポートされているかどうかを確認する方法は?
- 7. libC++がインストールされているかどうかを確認する方法は?
- 8. フォームがドッキングされているかどうかを確認する方法は?
- 9. ボタンが押されているかどうかを確認する方法は?
- 10. mithril.jsがロードされているかどうかを確認する方法は?
- 11. インストールされているwebpackのバージョンを確認する方法
- 12. Powershellでポートが開いているかどうかを確認する方法
- 13. テキストファイルがgeditで開いているかどうかを確認する方法
- 14. paho mqttがインストールされているかどうかを確認する方法
- 15. チェックボックスがチェックされているかどうかを確認する方法
- 16. DataRowが汚れているかどうかを確認する方法
- 17. UIViewがロードされているかどうかを確認する方法
- 18. アラームが設定されているかどうかを確認する方法
- 19. glibcが使用されているかどうかを確認する方法
- 20. GACアセンブリがロードされているかどうかを確認する方法
- 21. ボタンが選択されているかどうかを確認する方法
- 22. JPlayerが再生されているかどうかを確認する方法
- 23. ACLが保護されているかどうかを確認する方法
- 24. NSWindowが表示されているかどうかを確認する方法
- 25. ラジオボタンがチェックされているかどうかを確認する方法
- 26. イベントが防止されているかどうかを確認する方法
- 27. サービスがインストールされているかどうかを確認する方法
- 28. コレクションが変更されているかどうかを確認する方法?
- 29. WebElementが選択されているかどうかを確認する方法
- 30. カーソルスタイルがサポートされているかどうかを確認する方法
私はwebpack移行ガイドに従って更新します。だからステップ1のために私はちょうど** minim:falseを設定する必要があります。 theLoaderOptionsPlugin **にあるか、または単にプロダクションenvプラグインからuglifyを削除し、ステップ2の場合、バンドルされたjsファイルを検索してコメントが含まれているかどうかを確認しますか? – jasan