🚇 The JavaScript bundler for React Native. https://facebook.github.io/metro
Go to file
Rafael Oleza 409a2ae809 Always use the HMR transforms when building the bundle from the metro-bundler server
Summary:
This diff enables the HMR transforms for any bundle requested through the metro-bundler HTTP server, so it ignores the `hot` parameter passed in the URL.

This allows much faster switches when enabling/disabling HMR, since metro-bundler does not need to re-compile each single file again, while not impacting substantially build times when HMR is off.

I've done some lightweight benchmarks on my machine and these are the results (all the tests have been done after running metro-bundler with a clean cache and restarting the app).

**Before**

Time to build (HMR off): 1x (baseline)
Time to build (HMR on): 1.90x

**This diff**

Time to build (HMR off): 1.009x
Time to build (HMR on): 1.036x

(The reason why now it takes double the time to load the HMR bundle than the non-HMR bundle after launching the app is because the device after a restart always asks for the non-HMR bundle and afterwards the HMR bundle, causing the server to have to build both bundles).

**Bundle size**
In terms of bundle size, adding the HMR transforms increases the size by around 3-4% (this regression is due to the wrappers added around React components, and will depend on the app).

**Next steps**

There are two improvements to do after this diff:

1. Remove the `hot=true` parameter from the clients when they request the bundle. This will reduce by half the memory used by metro-bundler when switching from non-HMR to HMR (or when opening the app with HMR enabled), since metro-bundler caches the bundles based on url.
2. After this diff, the `hot` parameter in the various options objects will not make much sense, so my suggestion is to just remove it from everywhere and instead of checking for that parameter in the transformer, check for `dev=true` there.

Reviewed By: davidaurelio

Differential Revision: D5623623

fbshipit-source-id: cb76b9182e55f442e2987fcf59eee2ba2571578e
2017-08-15 18:44:03 -07:00
.github Initial repository structure. 2017-01-26 12:56:40 +00:00
flow-typed Backed out changeset db8638eebe2d 2017-06-14 09:53:06 -07:00
packages/metro-bundler Always use the HMR transforms when building the bundle from the metro-bundler server 2017-08-15 18:44:03 -07:00
scripts fix support for node v4 2017-06-26 05:08:50 -07:00
.babelrc fix support for node v4 2017-06-26 05:08:50 -07:00
.eslintignore Initial repository structure. 2017-01-26 12:56:40 +00:00
.eslintrc Add prettier to metro-bundler, fixing code styling issues 2017-06-12 01:20:50 -07:00
.flowconfig Don’t ignore `/build/` in `node_modules` 2017-06-09 09:56:52 -07:00
.gitignore Add nested yarn.lock 2017-06-12 18:07:19 +01:00
.npmignore Initial repository structure. 2017-01-26 12:56:40 +00:00
.travis.yml Initial repository structure. 2017-01-26 12:56:40 +00:00
CHANGELOG.md Initial repository structure. 2017-01-26 12:56:40 +00:00
CONTRIBUTING.md Initial repository structure. 2017-01-26 12:56:40 +00:00
LICENSE Initial repository structure. 2017-01-26 12:56:40 +00:00
PATENTS Initial repository structure. 2017-01-26 12:56:40 +00:00
README.md Update README 2017-06-06 03:29:08 -07:00
appveyor.yml Initial repository structure. 2017-01-26 12:56:40 +00:00
circle.yml Revert "attempt at fixing yarn install in CircleCI" 2017-07-19 17:31:28 +01:00
lerna.json metro-bundler: 0.11.0 2017-07-27 11:51:18 -07:00
package.json metro-bundler: upgrade all jest refs to delta.4 2017-07-28 13:02:53 -07:00
yarn.lock metro-bundler: upgrade all jest refs to delta.4 2017-07-28 13:02:53 -07:00

README.md

metro-bundler

CircleCI Build Status npm version

🚇 The JavaScript bundler for React Native.

  • 🚅 Fast: We aim for sub-second reload cycles, fast startup and quick bundling speeds.
  • ⚖️ Scalable: Works with thousands of modules in a single application.
  • ⚛️ Integrated: Supports every React Native project out of the box.

This project was previously part of the react-native repository. In this smaller repository it is easier for the team working on Metro Bundler to respond to both issues and pull requests. See react-native#13976 for the initial announcement.