【问题标题】:Reduce Browserify bundle of react.min.js and react-dom.min.js减少 react.min.js 和 react-dom.min.js 的 Browserify 包
【发布时间】:2016-12-22 15:44:58
【问题描述】:

我想将一些 React 库与 Browserify 和 --require 捆绑在一起,但因文件大小而推迟。

我使用以下 Browserify 命令:

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

现在,react.min.js 是 21k,react-dom.min.js 是 122k,但 libs.js 的结果是惊人的 269k。当然没有 126k 的 Browserify 开销?当我查看 libs.js 时,有很多添加的(未缩小的)React 代码。这是哪里来的?

【问题讨论】:

标签: reactjs browserify


【解决方案1】:

问题在于 Browserify 正在将 react-dom 中的 require 调用解析为 node_modules 中的 react 模块。该模块的package.jsonmain 指定为react.js - 因此您最终会得到一个包含react.min.js 之外的非缩小源的包。

请注意,如果您仅捆绑 react.min.js:

browserify \
--require ./node_modules/react/dist/react.min.js:react \
> bundle-react.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

要解决这个问题,您需要告诉 Browserify 排除 reactreact-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

【讨论】:

  • 很好的解释!谢谢你。我宁愿让 Browserify 和 UglifyJS 来处理它,但是构建大小的差异是巨大的!当我使用未缩小的版本创建bundle-libs.js 并通过 UglifyJS 进行管道传输时,我最终得到了一个 280k 大小的文件。 Facebook 的缩小器比 UglifyJS 好吗?
  • 我没有仔细看,但是在reactreact-dom 内的lib 目录中有很多文件/模块。每一个都会得到一些 Browserify 样板文件。缩小的dist 文件中使用的机制可能不那么冗长。此外,如果您通过 Browserify 转换使用 UglifyJS,则缩小不会应用于 Browserify 的样板 - 仅应用于导入到包中的模块的内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-21
  • 2016-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多