Skip to content

Commit cb7037b

Browse files
committed
Add HMR and Fast Refresh
https://github.com/pmmmwh/react-refresh-webpack-plugin After this change, you can run foreman start -f Procfile.dev-hmr and you can edit a JSX file and save and see the React change and the component state was preserved.
1 parent 1ab76f5 commit cb7037b

File tree

4 files changed

+63
-3
lines changed

4 files changed

+63
-3
lines changed

babel.config.js

+1
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ module.exports = function(api) {
7676
async: false
7777
}
7878
],
79+
process.env.WEBPACK_DEV_SERVER && 'react-refresh/babel',
7980
isProductionEnv && [
8081
'babel-plugin-transform-react-remove-prop-types',
8182
{

config/webpack/development.js

+16
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,21 @@
11
process.env.NODE_ENV = process.env.NODE_ENV || 'development'
22

3+
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
4+
35
const environment = require('./environment')
46

7+
const isWebpackDevServer = process.env.WEBPACK_DEV_SERVER;
8+
9+
//plugins
10+
if (isWebpackDevServer) {
11+
environment.plugins.append(
12+
'ReactRefreshWebpackPlugin',
13+
new ReactRefreshWebpackPlugin({
14+
overlay: {
15+
sockPort: 3035
16+
}
17+
})
18+
);
19+
}
20+
521
module.exports = environment.toWebpackConfig()

package.json

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
"react-on-rails": "12.0.1"
1010
},
1111
"devDependencies": {
12+
"@pmmmwh/react-refresh-webpack-plugin": "^0.4.1",
13+
"react-refresh": "^0.8.3",
1214
"webpack-dev-server": "^3.11.0"
1315
}
1416
}

yarn.lock

+44-3
Original file line numberDiff line numberDiff line change
@@ -940,6 +940,18 @@
940940
resolved "https://registry.yarnpkg.com/@csstools/convert-colors/-/convert-colors-1.4.0.tgz#ad495dc41b12e75d588c6db8b9834f08fa131eb7"
941941
integrity sha512-5a6wqoJV/xEdbRNKVo6I4hO3VjyDq//8q2f9I6PBAvMesJHFauXDorcNCsr9RzvsZnaWi5NYCcfyqP1QeFHFbw==
942942

943+
"@pmmmwh/react-refresh-webpack-plugin@^0.4.1":
944+
version "0.4.1"
945+
resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.1.tgz#a4db0ed8e58c2f8566161c9a8cdf1d095c9a891b"
946+
integrity sha512-MzM87WdX2r2KRFfhEho7oGyK1XRE/J9WwjB3v6oLQHN0dzBypBZxSWjnoYx+RWneRCsg8Sin1myf+EjX1fqIbQ==
947+
dependencies:
948+
ansi-html "^0.0.7"
949+
error-stack-parser "^2.0.6"
950+
html-entities "^1.2.1"
951+
native-url "^0.2.6"
952+
schema-utils "^2.6.5"
953+
source-map "^0.7.3"
954+
943955
944956
version "5.1.1"
945957
resolved "https://registry.yarnpkg.com/@rails/webpacker/-/webpacker-5.1.1.tgz#3c937aa719e46341f037a3f37349ef58085950df"
@@ -1233,7 +1245,7 @@ ansi-colors@^3.0.0:
12331245
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf"
12341246
integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==
12351247

1236-
1248+
[email protected], ansi-html@^0.0.7:
12371249
version "0.0.7"
12381250
resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e"
12391251
integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4=
@@ -2775,6 +2787,13 @@ error-ex@^1.2.0, error-ex@^1.3.1:
27752787
dependencies:
27762788
is-arrayish "^0.2.1"
27772789

2790+
error-stack-parser@^2.0.6:
2791+
version "2.0.6"
2792+
resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8"
2793+
integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ==
2794+
dependencies:
2795+
stackframe "^1.1.1"
2796+
27782797
es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5:
27792798
version "1.17.6"
27802799
resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a"
@@ -3528,7 +3547,7 @@ html-comment-regex@^1.1.0:
35283547
resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7"
35293548
integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==
35303549

3531-
html-entities@^1.3.1:
3550+
html-entities@^1.2.1, html-entities@^1.3.1:
35323551
version "1.3.1"
35333552
resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44"
35343553
integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==
@@ -4634,6 +4653,13 @@ nanomatch@^1.2.9:
46344653
snapdragon "^0.8.1"
46354654
to-regex "^3.0.1"
46364655

4656+
native-url@^0.2.6:
4657+
version "0.2.6"
4658+
resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae"
4659+
integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA==
4660+
dependencies:
4661+
querystring "^0.2.0"
4662+
46374663
46384664
version "0.6.2"
46394665
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
@@ -6013,7 +6039,7 @@ querystring-es3@^0.2.0:
60136039
resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
60146040
integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=
60156041

6016-
6042+
[email protected], querystring@^0.2.0:
60176043
version "0.2.0"
60186044
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
60196045
integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=
@@ -6076,6 +6102,11 @@ [email protected]:
60766102
"@babel/runtime-corejs3" "^7.9.6"
60776103
concurrently "^5.1.0"
60786104

6105+
react-refresh@^0.8.3:
6106+
version "0.8.3"
6107+
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f"
6108+
integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==
6109+
60796110
react@^16.13.1:
60806111
version "16.13.1"
60816112
resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e"
@@ -6718,6 +6749,11 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1:
67186749
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
67196750
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
67206751

6752+
source-map@^0.7.3:
6753+
version "0.7.3"
6754+
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
6755+
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
6756+
67216757
spawn-command@^0.0.2-1:
67226758
version "0.0.2-1"
67236759
resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0"
@@ -6819,6 +6855,11 @@ stable@^0.1.8:
68196855
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
68206856
integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==
68216857

6858+
stackframe@^1.1.1:
6859+
version "1.2.0"
6860+
resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303"
6861+
integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA==
6862+
68226863
static-extend@^0.1.1:
68236864
version "0.1.2"
68246865
resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6"

0 commit comments

Comments
 (0)