Skip to content

Commit 4e87b61

Browse files
saylestylerkatesmatthews
authored andcommitted
makes hot module reloading a thing! (#41)
* Add proper dependencies * Turn off Electron error warnings in console (temporarily)
1 parent c7f5339 commit 4e87b61

7 files changed

+443
-404
lines changed

.babelrc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"plugins": ["react-hot-loader/babel"]
3+
}

app/index.tsx

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as React from 'react';
22
import { render } from 'react-dom';
3-
import { AppContainer } from 'react-hot-loader';
3+
import { hot } from 'react-hot-loader/root';
44
import './app.global.css';
55
import ThemeContext from './contexts/themeContext';
66
import themes from './themes/themes';
@@ -21,22 +21,21 @@ const Index = () => {
2121
];
2222
const [context, setContext] = useState(modes);
2323
const serveMode = context.reduce((acc, mode) => {
24-
if (mode.active) acc = mode.value;
25-
return acc;
26-
}, 'defaultTheme');
24+
if (mode.active) acc = mode.value;
25+
return acc;
26+
}, 'defaultTheme');
2727

2828
return (
2929
<ThemeContext.Provider value={[context, setContext]}>
3030
<ThemeProvider theme={themes[serveMode]}>
31-
<AppContainer>
32-
<BrowserRouter>
33-
<Routes />
34-
</BrowserRouter>
35-
</AppContainer>
31+
<BrowserRouter>
32+
<Routes />
33+
</BrowserRouter>
3634
</ThemeProvider>
3735
</ThemeContext.Provider>
3836
);
3937
};
40-
render(<Index />, document.getElementById('root'));
4138

39+
hot(Index);
4240

41+
render(<Index />, document.getElementById('root'));

app/main.dev.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ if (
3333
process.env.NODE_ENV === 'development' ||
3434
process.env.DEBUG_PROD === 'true'
3535
) {
36+
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
3637
require('electron-debug')();
3738
}
3839

configs/webpack.config.base.js

Lines changed: 28 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,36 @@
1-
/**
2-
* Base webpack config used across other specific configs
3-
*/
4-
51
import path from 'path';
62
import webpack from 'webpack';
73
import { dependencies } from '../package.json';
4+
import ForkTsCheckerWebpackPlugin from 'fork-ts-checker-webpack-plugin';
85

96
export default {
107
externals: [...Object.keys(dependencies || {})],
11-
128
module: {
139
rules: [
1410
{
15-
test: /\.[jt]sx?$/,
11+
test: /\.(j|t)sx?$/,
1612
exclude: /node_modules/,
17-
use: [
18-
{
19-
loader: 'babel-loader',
20-
options: {
21-
cacheDirectory: true
22-
}
23-
},
24-
'ts-loader'
25-
]
13+
use: {
14+
loader: 'babel-loader',
15+
options: {
16+
cacheDirectory: true,
17+
babelrc: false,
18+
presets: [
19+
[
20+
'@babel/preset-env',
21+
{ targets: { browsers: 'last 2 versions' } } // #TODO: electron@our.version?
22+
],
23+
'@babel/preset-typescript',
24+
'@babel/preset-react'
25+
],
26+
plugins: [
27+
// plugin-proposal-decorators is only needed if you're using experimental decorators in TypeScript
28+
['@babel/plugin-proposal-decorators', { legacy: true }],
29+
['@babel/plugin-proposal-class-properties', { loose: true }],
30+
'react-hot-loader/babel'
31+
]
32+
}
33+
}
2634
}
2735
]
2836
},
@@ -33,18 +41,17 @@ export default {
3341
libraryTarget: 'commonjs2'
3442
},
3543

36-
/**
37-
* Determine the array of extensions that should be used to resolve modules.
38-
*/
3944
resolve: {
40-
extensions: ['.js', '.ts', '.tsx', '.json']
45+
extensions: ['.js', '.ts', '.tsx', '.json'],
46+
alias: {
47+
'react-dom': '@hot-loader/react-dom'
48+
}
4149
},
4250

4351
plugins: [
4452
new webpack.EnvironmentPlugin({
45-
NODE_ENV: 'production'
53+
NODE_ENV: 'development'
4654
}),
47-
4855
new webpack.NamedModulesPlugin()
4956
]
5057
};

configs/webpack.config.renderer.dev.babel.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ export default merge.smart(baseConfig, {
4646
target: 'electron-renderer',
4747

4848
entry: [
49-
'react-hot-loader/patch',
49+
'react-hot-loader/babel',
5050
`webpack-dev-server/client?http://localhost:${port}/`,
5151
'webpack/hot/only-dev-server',
5252
require.resolve('../app/index.tsx')

package.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
"build-e2e": "cross-env E2E_BUILD=true yarn build",
1010
"build-main": "cross-env NODE_ENV=production webpack --config ./configs/webpack.config.main.prod.babel.js --colors",
1111
"build-renderer": "cross-env NODE_ENV=production webpack --config ./configs/webpack.config.renderer.prod.babel.js --colors",
12-
"dev": "cross-env START_HOT=1 node -r @babel/register ./internals/scripts/CheckPortInUse.js && cross-env START_HOT=1 yarn start-renderer-dev",
12+
"dev": "cross-env START_HOT=1 NODE_ENV=development node -r @babel/register ./internals/scripts/CheckPortInUse.js && cross-env START_HOT=1 yarn start-renderer-dev",
1313
"package": "yarn build && electron-builder build --publish never",
1414
"package-all": "yarn build && electron-builder build -mwl",
1515
"package-ci": "yarn postinstall && yarn build && electron-builder --publish always",
@@ -235,7 +235,7 @@
235235
"ts-loader": "^5.3.2",
236236
"typescript": "^3.2.2",
237237
"url-loader": "^1.1.2",
238-
"webpack": "^4.28.3",
238+
"webpack": "^4.35.0",
239239
"webpack-bundle-analyzer": "^3.0.3",
240240
"webpack-cli": "^3.2.0",
241241
"webpack-dev-server": "^3.1.14",
@@ -244,6 +244,7 @@
244244
},
245245
"dependencies": {
246246
"@fortawesome/fontawesome-free": "^5.6.3",
247+
"@hot-loader/react-dom": "^16.8.6",
247248
"@types/pg": "^7.4.14",
248249
"@types/styled-components": "^4.1.16",
249250
"@typescript-eslint/parser": "^1.10.2",
@@ -255,10 +256,11 @@
255256
"eslint-config-react-app": "^4.0.1",
256257
"eslint-plugin-flowtype": "^3.10.3",
257258
"eslint-plugin-react-hooks": "^1.6.0",
259+
"fork-ts-checker-webpack-plugin": "^1.3.7",
258260
"history": "^4.7.2",
259261
"pg": "^7.11.0",
260262
"react": "^16.7.0",
261-
"react-dom": "^16.7.0",
263+
"react-dom": "npm:@hot-loader/react-dom",
262264
"react-hot-loader": "^4.6.3",
263265
"react-router": "^4.3.1",
264266
"react-router-dom": "^4.3.1",

0 commit comments

Comments
 (0)