on master help sign in
feat: enable hot module reloading ๐Ÿ™Œ
7ac8cfeMatt Condon (shrugs)
config-overrides.jsnew file+6
@@ -0,0 +1,6 @@
1+const rewireReactHotLoader = require('react-app-rewire-hot-loader');
2+
3+module.exports = function override(config, env) {
4+ config = rewireReactHotLoader(config, env);
5+ return config;
6+};
package-lock.json+56
@@ -8017,6 +8017,14 @@
8017 "minimalistic-crypto-utils": "^1.0.1"
8017 "minimalistic-crypto-utils": "^1.0.1"
8018 }
8018 }
8019 },
8019 },
8020+ "hoist-non-react-statics": {
8021+ "version": "3.3.0",
8022+ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.0.tgz",
8023+ "integrity": "sha512-0XsbTXxgiaCDYDIWFcwkmerZPSwywfUqYmwT4jzewKTQSWoE6FCMoUVOeBJWK3E/CrWbxRG3m5GzY4lnIwGRBA==",
8024+ "requires": {
8025+ "react-is": "^16.7.0"
8026+ }
8027+ },
8020 "home-or-tmp": {
8028 "home-or-tmp": {
8021 "version": "2.0.0",
8029 "version": "2.0.0",
8022 "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
8030 "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
@@ -14253,6 +14261,21 @@
14253 }
14261 }
14254 }
14262 }
14255 },
14263 },
14264+ "react-app-rewire-hot-loader": {
14265+ "version": "2.0.1",
14266+ "resolved": "https://registry.npmjs.org/react-app-rewire-hot-loader/-/react-app-rewire-hot-loader-2.0.1.tgz",
14267+ "integrity": "sha512-XTUPOv5q0zJeEtXECfilDPfqCiktSVbIyupiqigIHOO8EMZec2YfNpwZzqDWMu3yfaEHRs54qRCcCgRR/1w3EQ=="
14268+ },
14269+ "react-app-rewired": {
14270+ "version": "2.1.3",
14271+ "resolved": "https://registry.npmjs.org/react-app-rewired/-/react-app-rewired-2.1.3.tgz",
14272+ "integrity": "sha512-NXC2EsQrnEMV7xD70rHcBq0B4PSEzjY/K2m/e+GRgit2jZO/uZApnpCZSKvIX2leLRN69Sqf2id0VXZ1F62CDw==",
14273+ "requires": {
14274+ "cross-spawn": "^6.0.5",
14275+ "dotenv": "^6.2.0",
14276+ "semver": "^5.6.0"
14277+ }
14278+ },
14256 "react-dev-utils": {
14279 "react-dev-utils": {
14257 "version": "9.0.1",
14280 "version": "9.0.1",
14258 "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.1.tgz",
14281 "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-9.0.1.tgz",
@@ -14416,11 +14439,39 @@
14416 "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz",
14439 "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-5.1.6.tgz",
14417 "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q=="
14440 "integrity": "sha512-X1Y+0jR47ImDVr54Ab6V9eGk0Hnu7fVWGeHQSOXHf/C2pF9c6uy3gef8QUeuUiWlNb0i08InPSE5a/KJzNzw1Q=="
14418 },
14441 },
14442+ "react-hot-loader": {
14443+ "version": "4.12.0",
14444+ "resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.0.tgz",
14445+ "integrity": "sha512-N+8ct1euiQnwqqDyX+SrxsgZ13ax4e8JiHbSAPf7xAshPxF3iTqVJQUxOLH90RXOFaT8LLynq0VPz3rCK7AW1A==",
14446+ "requires": {
14447+ "fast-levenshtein": "^2.0.6",
14448+ "global": "^4.3.0",
14449+ "hoist-non-react-statics": "^3.3.0",
14450+ "loader-utils": "^1.1.0",
14451+ "lodash": "^4.17.11",
14452+ "prop-types": "^15.6.1",
14453+ "react-lifecycles-compat": "^3.0.4",
14454+ "shallowequal": "^1.0.2",
14455+ "source-map": "^0.7.3"
14456+ },
14457+ "dependencies": {
14458+ "source-map": {
14459+ "version": "0.7.3",
14460+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
14461+ "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ=="
14462+ }
14463+ }
14464+ },
14419 "react-is": {
14465 "react-is": {
14420 "version": "16.8.6",
14466 "version": "16.8.6",
14421 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
14467 "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.8.6.tgz",
14422 "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
14468 "integrity": "sha512-aUk3bHfZ2bRSVFFbbeVS4i+lNPZr3/WM5jT2J5omUVV1zzcs1nAaf3l51ctA5FFvCRbhrH0bdAsRRQddFJZPtA=="
14423 },
14469 },
14470+ "react-lifecycles-compat": {
14471+ "version": "3.0.4",
14472+ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
14473+ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
14474+ },
14424 "react-scripts": {
14475 "react-scripts": {
14425 "version": "3.0.1",
14476 "version": "3.0.1",
14426 "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz",
14477 "resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-3.0.1.tgz",
@@ -15545,6 +15596,11 @@
15545 }
15596 }
15546 }
15597 }
15547 },
15598 },
15599+ "shallowequal": {
15600+ "version": "1.1.0",
15601+ "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
15602+ "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ=="
15603+ },
15548 "shebang-command": {
15604 "shebang-command": {
15549 "version": "1.2.0",
15605 "version": "1.2.0",
15550 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
15606 "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
package.json+7โˆ’4
@@ -34,7 +34,10 @@
34 "more-entropy": "^0.0.7",
34 "more-entropy": "^0.0.7",
35 "prop-types": "^15.6.2",
35 "prop-types": "^15.6.2",
36 "react": "^16.8.6",
36 "react": "^16.8.6",
37+ "react-app-rewire-hot-loader": "^2.0.1",
38+ "react-app-rewired": "^2.1.3",
37 "react-dom": "^16.8.6",
39 "react-dom": "^16.8.6",
40+ "react-hot-loader": "^4.12.0",
38 "react-scripts": "3.0.1",
41 "react-scripts": "3.0.1",
39 "react-teleporter": "^1.1.0",
42 "react-teleporter": "^1.1.0",
40 "secp256k1": "^3.5.2",
43 "secp256k1": "^3.5.2",
@@ -59,10 +62,10 @@
59 "truffle": "4.1.11"
62 "truffle": "4.1.11"
60 },
63 },
61 "scripts": {
64 "scripts": {
62โˆ’ "start": "react-scripts start",
65+ "start": "react-app-rewired start",
63โˆ’ "build": "react-scripts build",
66+ "build": "react-app-rewired build",
64โˆ’ "test": "react-scripts test --env=jsdom",
67+ "test": "react-app-rewired test --env=jsdom",
65โˆ’ "eject": "react-scripts eject",
68+ "eject": "react-app-rewired eject",
66 "checksum": "cd build && find . -exec shasum -a256 {} ';' > ../checksums.txt && cd ..",
69 "checksum": "cd build && find . -exec shasum -a256 {} ';' > ../checksums.txt && cd ..",
67 "zip": "zip -ur bridge-$npm_package_version.zip README.md bridge-https.py checksums.txt && cd build && zip -ur ../bridge-$npm_package_version.zip ./* && cd ..",
70 "zip": "zip -ur bridge-$npm_package_version.zip README.md bridge-https.py checksums.txt && cd build && zip -ur ../bridge-$npm_package_version.zip ./* && cd ..",
68 "release": "npm install && npm run build && npm run checksum && npm run zip",
71 "release": "npm install && npm run build && npm run checksum && npm run zip",
src/index.js+18โˆ’1
@@ -1,6 +1,23 @@
1import React from 'react';
1import React from 'react';
2import ReactDOM from 'react-dom';
2import ReactDOM from 'react-dom';
3+import { AppContainer } from 'react-hot-loader';
3
4
4import Bridge from './Bridge';
5import Bridge from './Bridge';
5
6
7+const render = () =>
8+ ReactDOM.render(
9+ <AppContainer>
10+ <Bridge />
11+ </AppContainer>,
6โˆ’ReactDOM.render(<Bridge />, document.getElementById('root'));
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+}