フラットバンドルとは何か、なぜRollupはWebpackより優れているのか?
質問
私は最近 ロールアップ について調べ、Webpack や他のバンドルとどう違うかを見てきました。私が出会ったことの一つは、"フラットバンドル" のため、ライブラリに適しているということです。これは ツイート から、そして ロールアップを利用するためのReactの最近のPRである .
私の経験では、Rollupはフラットバンドル周りの最適化(hoistingなど)が優れているため、ライブラリのビルドに優れています。1/2
コード分割などでアプリをバンドルする場合は、Webpack 2の方が良いかもしれませんね。2/2
しかし、私はその意味を完全に理解しているわけではありません。フラット バンドルとは何を指しているのでしょうか?Rollup のドキュメントに記載されているのは トレースシェーキング を使えばバンドルサイズを小さくできることは知っていますが Webpackにもこれを行う方法があります . もしかしたら、私がこのコンセプトを完全に理解していないだけかもしれません。
これはRollupとWebpackに関する比較の質問ではないことに注意してください。それに興味がある人のために の比較表があります。 . これは主に、フラットバンドルとは何か?そして潜在的にRollupはこれを実現するために内部で何をやっているのか?
どのように解決するのですか?
編集: Rollup はコードの分割をサポートします。 記事を読む
編集: Webpack は、いくつかの状況でスコープのホイストをサポートするようになりました。 ブログ記事はこちら
フラットバンドルとは、単に「モジュールを1つのバンドルにする」という意味だと思いますが、つまり「フラット」は冗長です。React 16 での大きな違いは、React のソース モジュールをバンドルするのは自分のアプリの責任ではなく、デフォルトであらかじめ作られたバンドルを消費することです (ただし、常に プリビルドされた React の UMD バンドルが利用可能です。 はありましたが)。
むしろ、両者の大きな違いは、どうなるかというと モジュールの境界で . webpack の仕組みは、各モジュールを関数でラップし、ローダーとモジュールキャッシュを実装したバンドルを作成することです。実行時に、各モジュールの関数が順番に評価され、モジュールキャッシュが生成されます。このアーキテクチャには多くの利点があり、コード分割やオンデマンド読み込み、ホットモジュール置き換え (HMR) などの高度な機能の実装が可能になります。
ロールアップは異なるアプローチを取ります - すべてのコードを同じレベルに置きます (変数名などの衝突を避けるために、必要に応じて識別子を書き換えます)。これは、しばしば「」と呼ばれます。 スコープホイスト '. このため、モジュールごとのオーバーヘッドや、バンドルごとのオーバーヘッドがありません。バンドルはより小さくなることが保証されており、また、インダイレクトが少ないのでより速く評価されます (これについての詳細は 小さなモジュールのコスト ). トレードオフは、この動作が ES2015 モジュール セマンティクスに依存していることであり、webpack の高度な機能の一部が実装しにくくなることを意味します (例えば Rollup はコード分割をサポートしていません。少なくとも今のところは!)。
要するに、webpack は 一般的に の方がアプリに適しており、Rollup は は一般に はライブラリに適しています。
をまとめました。 の違いを説明する小さな gist を作成しました。 . また、Rollup の出力の感触を得るには Rollup REPL をいじってみてください。 .
関連
-
[解決済み] React + TypeScript のエラーです。この呼び出しにマッチするオーバーロードがありません
-
[解決済み] React JS Jestで「SyntaxError: 予期しないトークン"
-
[解決済み] ReactjsのEsLintの "react / jsx-props-no-spreading "エラーを無効化する。
-
[解決済み] componentWillReceiveProps は名称が変更されました。
-
[解決済み] 矢印本体を囲む予期せぬブロックステートメント
-
[解決済み] react-navigation v5を使ったreact-nativeアプリのAppNavigatorの構文を更新する。
-
[解決済み] create-react-appビルドスクリプトを実行する際に、ビルド.env変数を設定するには?
-
[解決済み】React 16のFragmentは、なぜコンテナDivよりも優れているのでしょうか?
-
[解決済み】SystemJSとWebpackの違いは何ですか?
-
[解決済み] タスクランナー(Gulp, Gruntなど)とバンドラー(Webpack, Browserify)。なぜ一緒に使うのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】React - 式は1つの親要素を持つ必要がありますか?
-
[解決済み】ngrokがReact devサーバーに接続しようとすると、無効なホストヘッダが表示される。
-
[解決済み] error 'document' is not defined : eslint / React
-
[解決済み] ReactJS giving error Uncaught TypeError: Super expression は null か関数でなければならず、undefined ではありません。
-
[解決済み] material-ui-pickers KeyboardDatePicker をモーメントで使用するには?
-
[解決済み] は、gatsby-imageで動作する良いreactのカルーセルコンポーネントはありますか?[って聞かれます。]
-
React はエラー TypeError を報告します。未定義のプロパティ 'XX' を読み取ることができない、問題は解決されました。
-
[解決済み] Static HTML elements with event handlers require a role." を修正するにはどうすればよいですか?
-
[解決済み] React Router - バージョン更新後のwithRouterでTypescriptエラーが発生する。
-
[解決済み] React」は定義される前に使用されていた