2016-12-22 2 views
2

いくつかのReactライブラリをBrowserifyと--requireとバンドルしたいが、ファイルサイズ分を差し引いた。reactify.min.jsとreact-dom.min.jsのBrowserifyバンドルを減らす

私は、次のBrowserifyコマンドを使用

:今

browserify path/to/react.min.js path/to/react-dom.min.js > libs.js 

を、react.min.jsは21Kで、反応-dom.min.jsは122Kですが、なんと269kでlibs.js結果。確かに126kのBrowserifyオーバーヘッドはありませんか? libs.jsを見ると、Reactコードがたくさん追加されています。これはどこから来たのですか?

+0

だから、これは同様の質問(HTTPのように見えます//stackoverflow.com/questions/27922208/how-to-keep-browserify-bundle-size-sensible-when-using-requires-for-thirdparty-s)。また、私は救済について話すこのブログの記事を見つけました(https://shellmonger.com/2016/01/12/reduce-the-size-of-your-react-applications/) –

答えて

2

問題は、のコールがreact-domreactモジュールがnode_modulesに解決されています。そのモジュールのpackage.jsonにはmainreact.jsと指定されています。そのため、react.min.jsに加えて、非縮小ソースも含まれるバンドルになります。

browserify \ 
--require ./node_modules/react/dist/react.min.js:react \ 
> bundle-react.js 

バンドルサイズがわずかに大きいだけreact.min.jsよりです:あなたが唯一のreact.min.jsをバンドルした場合、その

ls -l node_modules/react/dist/react.min.js 
... 21339 Dec 23 09:43 node_modules/react/dist/react.min.js 

ls -l bundle-react.js 
... 22006 Dec 23 11:56 bundle-react.js 

問題を解決するために、あなたはreactを除外するBrowserifyを指示する必要がありますし、 react-domのように、代替のメカニズムを提供する必要があります。つまり、--requireオプションを指定します:

browserify \ 
--exclude react \ 
--require ./node_modules/react/dist/react.min.js:react \ 
--exclude react-dom \ 
--require ./node_modules/react-dom/dist/react-dom.min.js:react-dom \ 
> bundle-lib.js 

バンドルサイズは現在組み合わせ、縮小さファイルに非常に近いようになります。

ls -l node_modules/react/dist/react.min.js 
... 21339 Dec 23 09:43 node_modules/react/dist/react.min.js 

ls -l node_modules/react-dom/dist/react-dom.min.js 
... 123996 Dec 23 09:43 node_modules/react-dom/dist/react-dom.min.js 

ls -l bundle-lib.js 
... 146227 Dec 23 11:39 bundle-lib.js 

あなたはその後あなたのライブラリーのバンドルからreactreact-domを必要とするアプリケーションバンドルを作成することができるはずです。アプリケーションバンドルを作成するためのBrowserifyコマンドはreactreact-domため--excludeオプションを指定する必要があることに注意してください - 彼らは、ライブラリバンドルからではなくnode_modulesから必要とされるように:

browserify \ 
--exclude react \ 
--exclude react-dom \ 
app.js > bundle-app.js 
+0

大きな説明!ありがとうございました。私はむしろBrowserifyとUglifyJSで処理したいと思いますが、ビルドサイズの違いは大きいです!未対応のバージョン、 'NODE_ENV = production'とUglifyJSを通した' bundle-libs.js'を作成すると、私は280kサイズのファイルになります。 Facebook minifierはUglifyJSよりずっと優れていますか? – GijsjanB

+0

私はそれをよく見ていませんでしたが、 'react'と' react-dom'の 'lib'ディレクトリにたくさんのファイルやモジュールがあります。それらのそれぞれは、いくつかのBrowserify定型文を取得します。最小化された 'dist'ファイルで使用されているメカニズムはそれほど冗長ではない可能性があります。また、Browserify変換を介してUglifyJSを使用している場合、そのバンドルにインポートされたモジュールのコンテンツにのみ、MinificationはBrowserifyのボイラープレートに適用されません。 – cartant

関連する問題