• This repository has been archived on 09/Apr/2020
  • Stars
    star
    779
  • Rank 58,364 (Top 2 %)
  • Language
    JavaScript
  • Created about 9 years ago
  • Updated over 6 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A React Transform that enables hot reloading React classes using Hot Module Replacement API

This Project Is Deprecated

React Hot Loader 3 is on the horizon, and you can try it today (boilerplate branch, upgrade example). It fixes some long-standing issues with both React Hot Loader and React Transform, and is intended as a replacement for both. The docs are not there yet, but they will be added before the final release. For now, this commit is a good reference.

react-transform-hmr

react-transform channel on discord

A React Transform that enables hot reloading React classes using Hot Module Replacement API. Hot module replacement is supported natively by Webpack and available in Browserify with browserify-hmr.

🚧🚧🚧🚧🚧

This is highly experimental tech. If you’re enthusiastic about hot reloading, by all means, give it a try, but don’t bet your project on it. Either of the technologies it relies upon may change drastically or get deprecated any day. You’ve been warned 😉 .

This technology exists to prototype next-generation React developer experience. Please don’t use it blindly if you don’t know the underlying technologies well. Otherwise you are likely to get disillusioned with JavaScript tooling.

No effort went into making this user-friendly yet. The goal is to eventually kill this technology in favor of less hacky technologies baked into React. These projects are not long term.

Installation

First, install the Babel plugin:

npm install --save-dev babel-plugin-react-transform

Then, install the transform:

npm install --save-dev react-transform-hmr

React

Edit your .babelrc to include a plugin configuration for react-transform. It contains array of the transforms you want to use:

{
  "presets": ["es2015", "stage-0"],
  "env": {
    // only enable it when process.env.NODE_ENV is 'development' or undefined
    "development": {
      "plugins": [["react-transform", {
        "transforms": [{
          "transform": "react-transform-hmr",
          // if you use React Native, pass "react-native" instead:
          "imports": ["react"],
          // this is important for Webpack HMR:
          "locals": ["module"]
        }]
        // note: you can put more transforms into array
        // this is just one of them!
      }]]
    }
  }
}

Make sure you process files with babel-loader, and that you don’t use React Hot Loader (it’s not needed with this transform).

It is up to you to ensure that the transform is not enabled when you compile the app in production mode. The easiest way to do this is to put React Transform configuration inside env.development in .babelrc and ensure you’re calling babel with NODE_ENV=production. See babelrc documentation for more details about using env option.

Warning! This doesn't currently work for stateless functional components that were introduced in React 0.14!

React Native

This transform enables hot reloading when used together with React Native Webpack Server. However note that you should not use .babelrc to configure it with React Native. Otherwise you’ll get Uncaught SyntaxError: Unexpected reserved word in ActivityIndicatorIOS.ios.js.

There are two problems why .babelrc doesn’t work well in React Native:

Until we have better .babelrc support in React Native, you should configure React Transform together with babel-loader:

var fs = require('fs');
var path = require('path');
var webpack = require('webpack');

var config = {
  debug: true,

  devtool: 'source-map',

  entry: {
    'index.ios': ['./src/main.js'],
  },

  output: {
    path: path.resolve(__dirname, 'build'),
    filename: '[name].js',
  },

  module: {
    loaders: [{
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'babel',
      query: {
        stage: 0,
        plugins: []
      }
    }]
  },

  plugins: []
};

// Hot mode
if (process.env.HOT) {
  config.devtool = 'eval';
  config.entry['index.ios'].unshift('react-native-webpack-server/hot/entry');
  config.entry['index.ios'].unshift('webpack/hot/only-dev-server');
  config.entry['index.ios'].unshift('webpack-dev-server/client?http://localhost:8082');
  config.output.publicPath = 'http://localhost:8082/';
  config.plugins.unshift(new webpack.HotModuleReplacementPlugin());

  // Note: enabling React Transform and React Transform HMR:
  config.module.loaders[0].query.plugins.push([
    'react-transform', {
      transforms: [{
        transform : 'react-transform-hmr',
        imports   : ['react'],
        locals    : ['module']
      }]
    }
  ]);
}

if (process.env.NODE_ENV === 'production') {
  config.plugins.push(new webpack.optimize.OccurrenceOrderPlugin());
  config.plugins.push(new webpack.optimize.UglifyJsPlugin());
}

module.exports = config;

See React Native Webpack Server examples for details.

License

MIT

More Repositories

1

react-hot-loader

Tweak React components in real time. (Deprecated: use Fast Refresh instead.)
JavaScript
12,257
star
2

overreacted.io

Personal blog by Dan Abramov.
JavaScript
7,053
star
3

react-hot-boilerplate

Minimal live-editing example for React
JavaScript
3,905
star
4

react-transform-boilerplate

A new Webpack boilerplate with hot reloading React components, and error handling on module and component level.
JavaScript
3,372
star
5

whatthefuck.is

An opinionated glossary of computer science terms for front-end developers. Written by Dan Abramov.
CSS
3,008
star
6

react-makes-you-sad

Here’s a flowchart to make you happy again!
Makefile
2,093
star
7

react-document-title

Declarative, nested, stateful, isomorphic document.title for React
JavaScript
1,866
star
8

flux-react-router-example

A sample app showcasing Flux with React Router
JavaScript
1,431
star
9

react-side-effect

Create components whose nested prop changes map to a global side effect
JavaScript
1,217
star
10

babel-plugin-react-transform

Babel plugin to instrument React components with custom transforms
JavaScript
1,080
star
11

suspense-experimental-github-demo

Sample project built with Suspense to demonstrate render-as-you-fetch
JavaScript
807
star
12

todos

Examples for “Idiomatic Redux”: one branch per lesson
JavaScript
802
star
13

subliminal

An opinionated minimalistic VS Code theme for JavaScript
632
star
14

react-proxy

Proxies React components without unmounting or losing their state
JavaScript
459
star
15

react-pure-render

[No Maintenance Intended] A function, a component and a mixin for React pure rendering
JavaScript
451
star
16

redux-devtools-dock-monitor

A resizable and movable dock for Redux DevTools monitors
JavaScript
405
star
17

library-boilerplate

An opinionated boilerplate for React libraries including ESLint, Mocha, Babel, Webpack and an example powered by Webpack Dev Server and React Hot Loader
JavaScript
386
star
18

redux-devtools-log-monitor

The default monitor for Redux DevTools with a tree view
JavaScript
310
star
19

react-blessed-hot-motion

A console app demo using React for rendering, animation, and hot reloading
JavaScript
281
star
20

react-lag-radar

JavaScript
272
star
21

promise-loader

A webpack bundle-loader ripoff with promise interface
JavaScript
216
star
22

react-transform-catch-errors

React Transform that catches errors inside React components
JavaScript
184
star
23

react-elmish-example

My personal attempt at understanding Elm architecture
HTML
170
star
24

react-deep-force-update

Force-updates React component tree recursively
JavaScript
122
star
25

the-redux-journey

Slides from my talk at React Europe 2016
JavaScript
89
star
26

react-hot-api

(Deprecated) A generic library implementing hot reload for React components without unmounting or losing their state
JavaScript
88
star
27

gitbook-plugin-prism

Gitbook plugin for Prism highlighting
JavaScript
85
star
28

react-stateful

[No Maintenance Intended] A higher-order React component for lifting state
JavaScript
84
star
29

workshop

React Europe 2016 workshop repo
JavaScript
84
star
30

react-transform

A specification for tools instrumenting React components
68
star
31

disposables

Disposables let you safely compose resource disposal semantics
JavaScript
64
star
32

base16-js

Base16 themes in JS
JavaScript
35
star
33

redux-devtools-themes

Color themes for Redux DevTools monitors
JavaScript
34
star
34

react-for-beginners

This is my cloned version of the Wes Bos Series.
CSS
21
star
35

hooks-perf-issues

This repo demonstrates a situation where it is slower to use React hooks than classes
JavaScript
15
star
36

sc-bug-repro

CSS
15
star
37

testcomp

JavaScript
10
star
38

myapp

just testing lol
JavaScript
10
star
39

tictactoe

A LINQy TicTacToe implementation in C# for StackOverflow
C#
8
star
40

test.react.dev

(Work in progress) React documentation website in Test Test TEst
6
star
41

playtronica

A side project for a friend
JavaScript
5
star
42

redux-bootstrap

Bootstrapping function for Redux applications.
TypeScript
5
star
43

react-dnd-example

JavaScript
4
star
44

draft-js-borked

JavaScript
4
star
45

react-dnd-touch-backend

Touch Backend for react-dnd
JavaScript
3
star
46

gaearon.github.io

Oh hi.
HTML
3
star
47

jest-babel-issue

HTML
2
star
48

react-webpack

A starter template for building with React, Gulp and Webpack
JavaScript
2
star
49

jest-mock-issue-repro

JavaScript
2
star
50

rn-bug-loop

Kotlin
2
star
51

ulonkaFrontend01

JavaScript
1
star
52

HtmlWebpackReplaceManifestAssetsPlugin

A subplugin of the HtmlWebpackPlugin for replacing, in a html template, the assets with theis hashed versions
JavaScript
1
star