2017-09-15 1 views
4

私はマルチエントリーポイントwebpackビルドを持っています。私は生産用のアーティファクトサイズの最適化に取り組んでいます。 webpack-bundle-analyzerは、以下の画像を生成:Webpackアーティファクトで何度も依存関係が繰り返されるのはなぜですか?

enter image description here

それはAtlasKit依存関係が総アーティファクトサイズの巨大な塊を作ることは明らかです。具体的には、私はstyled-components.es.jsが何度も繰り返されるのを見る。さらに、同じ依存関係が他のすべてのパッケージ間で共有されているvendor.jsにも存在します。

styled-components.es.jsが何度も繰り返され、なぜそれがvendor.jsの単一依存関係で共有できないのか説明できますか?重複を取り除くためにできることはありますか?vendor.jsの単一のstyled-components.es.js依存にのみ依存していますか?

AtlasKitの依存関係には、パッケージに含まれているnode_modulesフォルダがネストされていることが少し奇妙なことがわかりました。 distが十分でないのはなぜですか?それはstyled-components.es.jsvendor.jsで共有できない理由の一部ですか?

enter image description here

私はWebPACKののIgnorePlugin(moment.jsロケールに類似)を介して手動で依存関係を除外しようとしましたが、そうするために、これまでできませんでした。

洞察力があれば幸いです。ありがとう!

+0

解決方法が見つかりましたか?同じ問題を抱えていて、私はwebpackでひどいと思っていましたが、何かが奇妙に@atlaskitで構成されているようです。 –

+0

@MitchLillie残念ながら私はしませんでした。しかし、もう一度時間を見つけたら、これ以上調べてみたいと思います。私はまだ解決策があるべきだと考えています。 – tobi

答えて

1

複数のチャンクから共通のチャンクへの依存関係を統合したいように思えます。このためには、webpack.CommonsChunkPluginを調べることをおすすめします。特に興味深いの

あなたはプラグインに渡すことができますminChunksプロパティです:

minChunks:数は|インフィニティ|機能(モジュール、カウント) - >ブール、必要チャンクの //最小数コモンズチャンクに移動する前にモジュールを格納すること。 //番号は2以上で、チャンクの数以下でなければなりません。 // Infinityを渡すと、commonsチャンクが作成されますが、モジュールはその中に移動されません。 // functionを指定することで、カスタムロジックを追加できます。 (チャンクの数にデフォルト設定)

は、私はあなたのWebPACKの設定には、このプラグインを追加しようと助言:

new webpack.optimize.CommonsChunkPlugin({ 
    children: true, 
    async: true, 
    minChunks: 3 
}) 

この用法は"Extra async commons chunk"にさらに記載されています。

チャンク間で共有されるコードの量を調べたい場合は、Webpackにもsamccone/bundle-buddyを試してみることを検討してください。

既にCommonsChunkPluginを使用している場合は、詳しい情報を提供するためにWebpack設定を確認する必要があります。

+0

こんにちはピーター、あなたの返事をありがとう。私はすでにCommonsChunkPluginを使用しています。これが 'vendor.js'の取得方法です。あなたは私のWebpackの設定をここで見ることができます:https://pastebin.com/vgiQrPqs – tobi

+0

あなたの設定を投稿していただきありがとうございます。私はすでに変換されたコードをインポートしているので、あなたは '@ atlaskit'から実際のツリーシェイキングを取得していないと思います。 '@ atlaskit'は' 'module ''フィールドをサポートしているので、ESモジュールとしてそれを消費することはできません。 Atlassian Kitには、未処理のソースコードを指すキー "ak:webpack:raw": "src/index.jsx"が付属しているようです。このエントリポイントから、['this 2ality post'](http://2ality.com/2017/06/pkg-esnext.html#package-users)で説明されているプロセスを使用して含めることができます。 彼らは 'ak:webpack:raw'ではなく、' module 'フィールドを使うべきです – Peter

関連する問題