on master help sign in
Merge pull request #181 from urbit/feat/hot-reload-v2

feat: upgrade to latest hotreload api and add better hook support

commitc7bc9ab4133c7f4a51fb5b8cd6211af00cd95ca2 authorMatt Condon <mattgcondon@gmail.com> dateTue 2 Jul 2019, 15:49 (7 years ago) parent93858a42144ac9
5 files changed+33−32
config-overrides.js+7 package-lock.json+18−11 package.json+3−2 src/Bridge.js+4−1 src/index.js+1−18
config-overrides.js+7
@@ -1,6 +1,13 @@
11const rewireReactHotLoader = require('react-app-rewire-hot-loader');
2+const rewireAliases = require('react-app-rewire-aliases');
3+
4+const alias = rewireAliases.aliasesOptions({
5+ 'react-dom': '@hot-loader/react-dom',
6+});
27
38module.exports = function override(config, env) {
49 config = rewireReactHotLoader(config, env);
10+ config = alias(config, env);
11+
512 return config;
613};
package-lock.json+18−11
@@ -1254,6 +1254,17 @@
12541254 "@hapi/hoek": "6.x.x"
12551255 }
12561256 },
1257+ "@hot-loader/react-dom": {
1258+ "version": "16.8.6",
1259+ "resolved": "https://registry.npmjs.org/@hot-loader/react-dom/-/react-dom-16.8.6.tgz",
1260+ "integrity": "sha512-+JHIYh33FVglJYZAUtRjfT5qZoT2mueJGNzU5weS2CVw26BgbxGKSujlJhO85BaRbg8sqNWyW1hYBILgK3ZCgA==",
1261+ "requires": {
1262+ "loose-envify": "^1.1.0",
1263+ "object-assign": "^4.1.1",
1264+ "prop-types": "^15.6.2",
1265+ "scheduler": "^0.13.6"
1266+ }
1267+ },
12571268 "@jest/console": {
12581269 "version": "24.7.1",
12591270 "resolved": "https://registry.npmjs.org/@jest/console/-/console-24.7.1.tgz",
@@ -14261,6 +14272,12 @@
1426114272 }
1426214273 }
1426314274 },
14275+ "react-app-rewire-aliases": {
14276+ "version": "0.2.0",
14277+ "resolved": "https://registry.npmjs.org/react-app-rewire-aliases/-/react-app-rewire-aliases-0.2.0.tgz",
14278+ "integrity": "sha1-71/8AJnuwFJ5lJ+rjUmDwVVqHB4=",
14279+ "dev": true
14280+ },
1426414281 "react-app-rewire-hot-loader": {
1426514282 "version": "2.0.1",
1426614283 "resolved": "https://registry.npmjs.org/react-app-rewire-hot-loader/-/react-app-rewire-hot-loader-2.0.1.tgz",
@@ -14270,6 +14287,7 @@
1427014287 "version": "2.1.3",
1427114288 "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.1.3.tgz",
1427214289 "integrity": "sha512-NXC2EsQrnEMV7xD70rHcBq0B4PSEzjY/K2m/e+GRgit2jZO/uZApnpCZSKvIX2leLRN69Sqf2id0VXZ1F62CDw==",
14290+ "dev": true,
1427314291 "requires": {
1427414292 "cross-spawn": "^6.0.5",
1427514293 "dotenv": "^6.2.0",
@@ -14423,17 +14441,6 @@
1442314441 }
1442414442 }
1442514443 },
14426− "react-dom": {
14427− "version": "16.8.6",
14428− "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.8.6.tgz",
14429− "integrity": "sha512-1nL7PIq9LTL3fthPqwkvr2zY7phIPjYrT0jp4HjyEQrEROnw4dG41VVwi/wfoCneoleqrNX7iAD+pXebJZwrwA==",
14430− "requires": {
14431− "loose-envify": "^1.1.0",
14432− "object-assign": "^4.1.1",
14433− "prop-types": "^15.6.2",
14434− "scheduler": "^0.13.6"
14435− }
14436− },
1443714444 "react-error-overlay": {
1443814445 "version": "5.1.6",
1443914446 "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz",
package.json+3−2
@@ -14,6 +14,7 @@
1414 "node": "11.0.0"
1515 },
1616 "dependencies": {
17+ "@hot-loader/react-dom": "^16.8.6",
1718 "@ledgerhq/hw-app-eth": "^4.61.0",
1819 "@ledgerhq/hw-transport-u2f": "^4.61.0",
1920 "PaperCollateralRenderer": "github:urbit/PaperCollateralRenderer",
@@ -35,8 +36,6 @@
3536 "prop-types": "^15.6.2",
3637 "react": "^16.8.6",
3738 "react-app-rewire-hot-loader": "^2.0.1",
38− "react-app-rewired": "^2.1.3",
39− "react-dom": "^16.8.6",
4039 "react-hot-loader": "^4.12.0",
4140 "react-scripts": "3.0.1",
4241 "react-teleporter": "^1.1.0",
@@ -57,6 +56,8 @@
5756 "node-sass": "^4.12.0",
5857 "npm-run-all": "^4.1.3",
5958 "prettier": "^1.18.2",
59+ "react-app-rewire-aliases": "^0.2.0",
60+ "react-app-rewired": "^2.1.3",
6061 "serve": "^11.0.1",
6162 "source-map-explorer": "^2.0.0",
6263 "truffle": "4.1.11"
src/Bridge.js+4−1
@@ -1,4 +1,5 @@
11import React from 'react';
2+import { hot } from 'react-hot-loader/root';
23import { Just, Nothing } from 'folktale/maybe';
34import { IndigoApp } from 'indigo-react';
45
@@ -36,7 +37,7 @@ const INITIAL_MNEMONIC = IS_STUBBED
3637 : Nothing();
3738const INITIAL_POINT_CURSOR = IS_STUBBED ? Just(65792) : Nothing();
3839
39−export default function Bridge() {
40+function Bridge() {
4041 return (
4142 <Provider
4243 views={ROUTES}
@@ -52,3 +53,5 @@ export default function Bridge() {
5253 </Provider>
5354 );
5455}
56+
57+export default process.env.NODE_ENV === 'development' ? hot(Bridge) : Bridge;
src/index.js+1−18
@@ -1,23 +1,6 @@
11import React from 'react';
22import ReactDOM from 'react-dom';
3−import { AppContainer } from 'react-hot-loader';
43
54import Bridge from './Bridge';
65
7−const render = () =>
8− ReactDOM.render(
9− <AppContainer>
10− <Bridge />
11− </AppContainer>,
12− document.getElementById('root')
13− );
14−
15−// Render once
16−render();
17−
18−// Webpack Hot Module Replacement API
19−if (module.hot) {
20− module.hot.accept('./Bridge', () => {
21− render();
22− });
23−}
6+ReactDOM.render(<Bridge />, document.getElementById('root'));