/haul

Haul is a command line tool for developing React Native apps

Primary LanguageHTMLMIT LicenseMIT

Haul

A command line tool for developing React Native apps


Build Status Version MIT License

All Contributors PRs Welcome Code of Conduct

Chat tweet

Haul is a drop-in replacement for react-native CLI built on open tools like Webpack. It can act as a development server or bundle your React Native app for production.

Features

  • Replaces React Native packager to bundle your app
  • Access to full webpack ecosystem, using additonal loaders and plugins is simple
  • Doesn't need watchman, symlinks work nicely
  • Helpful and easy to understand error messages
  • Hot Module Reloading

Getting started

Start by adding Haul as a dependency to your React Native project (use react-native init MyProject to create one if you don't have a project):

yarn add --dev haul
# Traditionalist? No problem:
npm install --save-dev haul

If you're on a React Native version >= 0.43, add the following in android/app/build.gradle somewhere before the apply from: "../../node_modules/react-native/react.gradle" statement:

project.ext.react = [
    cliPath: "node_modules/haul/bin/cli.js"
]

To configure your project to use haul, run the following:

yarn haul init
# npm >= 5.2.0 :
npx haul init
# npm < 5.2.0 :
npm install -g npx
npx haul init

This will automatically add the configuration needed to make Haul work with your app, e.g. add webpack.haul.js to your project, which you can customise to add more functionality.

Next, you're ready to start the development server:

yarn haul start -- --platform ios
# Or:
npx haul start --platform ios

Finally, reload your app to update the bundle or run your app just like you normally would:

react-native run-ios

Documentation

Check out the docs to learn more about available commands and tips on customizing the webpack configuration.

  1. CLI Commands
  2. Configuration
  3. Recipes

Hot Module Replacement

Please refer to the Setup guide.

Limitations

Haul uses a completely different architecture from React Native packager, which means there are some things which don't work quite the same.

We are actively working on adding support for the following:

  • Existing react-native commands

The following features are unlikely to be supported in the future:

  • Haste module system: use something like babel-plugin-module-resolver instead
  • Transpile files under node_modules: transpile your modules before publishing, or configure webpack not to ignore them

Contributors

Thanks goes to these wonderful people (emoji key):


Mike Grabowski

πŸ’¬ πŸ’» 🎨 πŸ“– πŸ’‘ πŸ€” πŸ‘€

Satyajit Sahoo

πŸ’¬ πŸ’» 🎨 πŸ€” πŸ‘€

PaweΕ‚ TrysΕ‚a

πŸ’¬ πŸ› πŸ’» πŸ“– πŸ’‘ πŸ€”

Krzysztof Borowy

πŸ’¬ πŸ› πŸ’» πŸ€”

MichaΕ‚ PierzchaΕ‚a

πŸ’» πŸ€” ⚠️

Steve Kellock

πŸ’»

Mathieu Dutour

πŸ’»

Orta

πŸ“–

Yann Pringault

πŸ’» πŸ“–

Drapich Piotr

πŸ’» πŸ“–

JΓΊlio CΓ©sar

πŸ› πŸ’»

LiJung Chi

πŸ’»

spypsy

πŸ’»

Juwan Wheatley

πŸ“–

Jeremi Stadler

πŸ“–

David Sheldrick

πŸ’»

Miguel Oller

πŸ› πŸ’»

Krzysztof Karol

πŸ’»

Jakub Stasiak

πŸ’»

Ferran Negre

πŸ› πŸ’»

CL123123

πŸ“–

Marty Penner

πŸ“–

Jim Cummins

πŸ“–

Gant Laborde

πŸ“–

PaweΕ‚ Burniak

πŸ“–

bsnelder

πŸ’»

aivæn

πŸ’»

Nemanja Stojanovic

πŸ’»

bogdanbolchis

πŸ“–

Joe Arasin

πŸ› πŸ’»

Norbert de Langen

πŸ“–

Gustav Wengel

πŸ“–

Eric Wooley

πŸ› πŸ’»

Matt Cubitt

πŸ› πŸ’»

Jakub BeneΕ‘

πŸ’»

Tasveer Singh

πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!