🚇 The JavaScript bundler for React Native. https://facebook.github.io/metro
Go to file
Rafael Oleza 2446fe2211 Decouple the dependency traversal logic from Bundler/Dependencygraph/Module
Summary:
This commit refactors the metro bundling logic to make the traversal of dependencies much more generic, to not depend on any assumption regarding dependency resolution, haste, or even about the transformer/caching system.

So, the actual API of the `DeltaBundler` module (which will be extracted as a separate package in the near future) ends up being like this:

```
const graph = await deltaBundler.buildGraph(
  ['/root/entryPoint1.js', '/root/entryPoint2.js', /* ... */],
  {
    dependencyResolver: (from, to) => require('resolve').sync(to, {from}), // Use the standard nodejs resolver
    transformFn: filePath => await transformFileUsingWhateverIPrefer(filePath),
  },
);
```

The only part that is still coupled with the `DependencyGraph` is the file listener (which is tied to JestHasteMap via `DependencyGraph`), which is going to be decoupled soon.

From here, and once we have the new caching system fully rolled out and the old cache logic removed, we'll incorporate `jest-worker` and the caching system directly into the build graph logic, to end up extracting the whole `DeltaBundler` logic into its own package.

From there we can potentially reuse it to create simpler/more focused bundlers for web/etc.

Reviewed By: davidaurelio

Differential Revision: D7617143

fbshipit-source-id: b7e1a71cd95043f6232b07f2e8c45dcd49f089f2
2018-04-18 12:25:02 -07:00
.github Rename metro-bundler to metro 2017-11-30 11:56:25 +00:00
docs BREAKING CHANGE: UPGRADE REACT NATIVE TO BABEL 7! 2018-04-11 17:14:14 -07:00
flow-typed Fix non-existing babel types 2018-04-09 17:58:00 -07:00
packages Decouple the dependency traversal logic from Bundler/Dependencygraph/Module 2018-04-18 12:25:02 -07:00
scripts Make eslint rules more strict 2018-03-01 06:07:40 -08:00
website Update license headers for MIT license 2018-02-16 18:30:48 -08:00
.babelrc fix support for node v4 2017-06-26 05:08:50 -07:00
.eslintignore Fold .eslintrc's into the root eslintrc 2018-02-15 08:24:07 -08:00
.eslintrc.js Make eslint rules more strict 2018-03-01 06:07:40 -08:00
.flowconfig @allow-large-files clean up xplat/js for flow 0.70.0 2018-04-17 05:50:48 -07:00
.gitignore ignore build artifacts 2018-03-12 03:53:38 -07: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 Rename metro-bundler to metro 2017-11-30 11:56:25 +00:00
CODE_OF_CONDUCT.md Add CODE_OF_CONDUCT.md 2017-11-22 02:58:16 -08:00
CONTRIBUTING.md Update to MIT license 2018-02-16 18:30:48 -08:00
LICENSE Update to MIT license 2018-02-16 18:30:48 -08:00
README.md dropthe 2018-01-08 03:38:32 -08:00
appveyor.yml Initial repository structure. 2017-01-26 12:56:40 +00:00
circle.yml Add NPM_TOKEN to the npmrc configuration to be able to publish the npm package from circleci 2018-04-11 10:53:53 -07:00
lerna.json Bump metro@0.32.0 2018-04-11 10:53:54 -07:00
package.json @allow-large-files clean up xplat/js for flow 0.70.0 2018-04-17 05:50:48 -07:00
yarn.lock @allow-large-files clean up xplat/js for flow 0.70.0 2018-04-17 05:50:48 -07:00

README.md

Metro

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.

Installation & Documentation

See the Metro website for documentation.