Skip to content
This repository was archived by the owner on Jun 4, 2023. It is now read-only.

Commit d34d277

Browse files
authored
chore: optimizing build process (#560)
1 parent 4de107f commit d34d277

File tree

29 files changed

+1306
-1292
lines changed

29 files changed

+1306
-1292
lines changed

electron-builder.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717
"target": [
1818
{
1919
"target": "AppImage",
20-
"arch": ["ia32", "x64"]
20+
"arch": ["x64"]
2121
},
2222
{
2323
"target": "deb",
24-
"arch": ["ia32", "x64"]
24+
"arch": ["x64"]
2525
}
2626
]
2727
},

package.json

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,13 @@
2323
},
2424
"scripts": {
2525
"dev-renderer": "cross-env DEV=1 webpack serve --config webpack.config.renderer.js",
26-
"dev-web": "cross-env DEV=1 webpack serve --config webpack.config.web.js",
2726
"dev-webpack": "cross-env DEV=1 webpack",
2827
"build-renderer": "webpack --config webpack.config.renderer.js",
29-
"pre-renderer": "cross-env PREBUILD=1 npm run build-renderer",
3028
"dev": "cross-env START=1 npm run watch",
31-
"build": "npm run pre-renderer && concurrently \"npm run build-renderer\" \"webpack\" \"webpack --config webpack.config.web.js\"",
29+
"build": "rimraf build && concurrently \"npm run build-renderer\" \"webpack\"",
3230
"ci-build": "node scripts/ci-build.js",
3331
"start": "electron .",
34-
"watch": "concurrently \"npm run dev-renderer\" \"npm run dev-webpack\" \"npm run dev-web\"",
32+
"watch": "concurrently \"npm run dev-renderer\" \"npm run dev-webpack\"",
3533
"compile-win32": "npm run build && electron-builder -w",
3634
"compile-darwin": "npm run build && electron-builder -m",
3735
"compile-linux": "npm run build && electron-builder -l",
@@ -40,63 +38,66 @@
4038
"rebuild": "electron-builder install-app-deps"
4139
},
4240
"devDependencies": {
43-
"@cliqz/adblocker-electron": "1.19.0",
41+
"@babel/core": "^7.12.16",
42+
"@cliqz/adblocker-electron": "1.20.1",
43+
"@pmmmwh/react-refresh-webpack-plugin": "^0.4.3",
4444
"@types/animejs": "^3.1.2",
45-
"@types/chrome": "0.0.128",
45+
"@types/chrome": "0.0.130",
4646
"@types/crypto-js": "^4.0.1",
4747
"@types/jszip": "^3.4.1",
4848
"@types/nedb": "1.8.11",
49-
"@types/node": "14.14.21",
49+
"@types/node": "14.14.28",
5050
"@types/node-fetch": "^2.5.8",
51-
"@types/react": "17.0.0",
52-
"@types/react-dom": "17.0.0",
51+
"@types/react": "17.0.2",
52+
"@types/react-dom": "17.0.1",
5353
"@types/styled-components": "5.1.7",
54-
"@typescript-eslint/eslint-plugin": "^4.13.0",
55-
"@typescript-eslint/parser": "^4.13.0",
56-
"@wexond/rpc-core": "^1.0.2",
57-
"@wexond/rpc-electron": "^1.0.2",
54+
"@typescript-eslint/eslint-plugin": "^4.15.1",
55+
"@typescript-eslint/parser": "^4.15.1",
56+
"@wexond/rpc-core": "^1.0.3",
57+
"@wexond/rpc-electron": "^1.0.3",
5858
"animejs": "^3.2.1",
5959
"awesome-node-loader": "^1.1.1",
60+
"babel-loader": "^8.2.2",
6061
"concurrently": "^5.3.0",
6162
"copy-webpack-plugin": "^7.0.0",
6263
"cross-env": "7.0.3",
63-
"crypto-js": "^4.0.0",
64-
"electron": "11.2.0",
64+
"electron": "11.2.3",
6565
"electron-builder": "22.9.1",
6666
"electron-extensions": "^7.0.0-beta.3",
6767
"electron-updater": "4.3.5",
68-
"eslint": "^7.17.0",
69-
"eslint-config-prettier": "^7.1.0",
68+
"eslint": "^7.20.0",
69+
"eslint-config-prettier": "^7.2.0",
7070
"eslint-plugin-prettier": "^3.3.1",
7171
"eslint-plugin-react": "^7.22.0",
7272
"file-loader": "^6.2.0",
7373
"file-type": "16.2.0",
7474
"fork-ts-checker-webpack-plugin": "^6.1.0",
75-
"html-webpack-plugin": "^4.5.1",
75+
"html-webpack-plugin": "^5.1.0",
7676
"icojs": "^0.16.0",
77-
"jszip": "^3.5.0",
78-
"mobx": "6.0.4",
79-
"mobx-react-lite": "3.1.6",
77+
"jszip": "^3.6.0",
78+
"mobx": "6.1.7",
79+
"mobx-react-lite": "3.2.0",
8080
"nedb": "1.8.0",
8181
"node-bookmarks-parser": "^2.0.0",
8282
"node-fetch": "^2.6.1",
8383
"prettier": "2.2.1",
8484
"pretty-bytes": "5.5.0",
8585
"react": "17.0.1",
8686
"react-dom": "17.0.1",
87-
"react-hot-loader": "4.13.0",
87+
"react-refresh": "^0.9.0",
8888
"react-windows-controls": "1.1.1",
89+
"rimraf": "^3.0.2",
8990
"source-map-support": "^0.5.19",
9091
"styled-components": "^5.2.1",
91-
"terser": "^5.5.1",
92+
"terser": "^5.6.0",
9293
"terser-webpack-plugin": "^5.1.1",
93-
"ts-loader": "^8.0.14",
94+
"ts-loader": "^8.0.17",
9495
"tsconfig-paths-webpack-plugin": "^3.3.0",
95-
"typescript": "^4.1.3",
96+
"typescript": "^4.1.5",
9697
"typescript-plugin-styled-components": "^1.4.4",
97-
"webpack": "5.15.0",
98-
"webpack-bundle-analyzer": "^4.3.0",
99-
"webpack-cli": "4.3.1",
98+
"webpack": "5.22.0",
99+
"webpack-bundle-analyzer": "^4.4.0",
100+
"webpack-cli": "4.5.0",
100101
"webpack-dev-server": "^3.11.2",
101102
"webpack-merge": "^5.7.3"
102103
},

src/common/renderer-config.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
import { configure } from 'mobx';
2+
import { setIpcRenderer } from '@wexond/rpc-electron';
3+
import { ipcRenderer } from 'electron';
24

35
export const configureUI = () => {
46
configure({ enforceActions: 'never' });
57
};
8+
9+
export const configureRenderer = () => {
10+
setIpcRenderer(ipcRenderer);
11+
};

src/constants/files.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ export const NETWORK_ERROR_HOST = 'network-error';
1010

1111
export const WEBUI_BASE_URL =
1212
process.env.NODE_ENV === 'development'
13-
? 'http://localhost:4445/'
13+
? 'http://localhost:4444/'
1414
: `${WEBUI_PROTOCOL}://`;
1515

1616
export const WEBUI_URL_SUFFIX = WEBUI_BASE_URL.startsWith('http')

src/main/application.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ export class Application {
4242
const ext = extname(path);
4343

4444
if (ext === '.html') {
45+
this.windows.current.win.focus();
4546
this.windows.current.viewManager.create({
4647
url: `file:///${path}`,
4748
active: true,
@@ -50,6 +51,7 @@ export class Application {
5051
}
5152
return;
5253
} else if (isURL(path)) {
54+
this.windows.current.win.focus();
5355
this.windows.current.viewManager.create({
5456
url: prefixHttp(path),
5557
active: true,

src/main/index.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
1+
import { ipcMain, app, webContents } from 'electron';
2+
import { setIpcMain } from '@wexond/rpc-electron';
3+
setIpcMain(ipcMain);
4+
15
if (process.env.NODE_ENV === 'development') {
26
require('source-map-support').install();
37
}
48

5-
import { ipcMain, app, webContents } from 'electron';
69
import { platform } from 'os';
710
import { Application } from './application';
811

src/renderer/pre-entry.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
import { configureRenderer } from '~/common/renderer-config';
2+
configureRenderer();
Lines changed: 46 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import * as React from 'react';
22
import { observer } from 'mobx-react-lite';
33
import { ThemeProvider } from 'styled-components';
4-
import { hot } from 'react-hot-loader/root';
54

65
import { StyledApp, Title, Row, Label, Buttons } from './style';
76
import store from '../../store';
@@ -51,51 +50,49 @@ const onRemove = () => {
5150
store.hide();
5251
};
5352

54-
export const App = hot(
55-
observer(() => {
56-
return (
57-
<ThemeProvider theme={{ ...store.theme }}>
58-
<StyledApp visible={store.visible}>
59-
<UIStyle />
60-
<Title>{store.dialogTitle}</Title>
61-
<Row>
62-
<Label>Name</Label>
63-
<Input
64-
tabIndex={0}
65-
className="textfield"
66-
ref={store.titleRef}
67-
onChange={onChange}
68-
/>
69-
</Row>
70-
<Row>
71-
<Label>Folder</Label>
72-
<Dropdown
73-
dark={store.theme['dialog.lightForeground']}
74-
tabIndex={1}
75-
className="dropdown"
76-
onMouseDown={onDropdownClick}
77-
>
78-
{store.currentFolder && getBookmarkTitle(store.currentFolder)}
79-
</Dropdown>
80-
</Row>
81-
<Buttons>
82-
<Button onClick={onDone}>Done</Button>
83-
<Button
84-
onClick={onRemove}
85-
background={
86-
store.theme['dialog.lightForeground']
87-
? 'rgba(255, 255, 255, 0.08)'
88-
: 'rgba(0, 0, 0, 0.08)'
89-
}
90-
foreground={
91-
store.theme['dialog.lightForeground'] ? 'white' : 'black'
92-
}
93-
>
94-
Remove
95-
</Button>
96-
</Buttons>
97-
</StyledApp>
98-
</ThemeProvider>
99-
);
100-
}),
101-
);
53+
export const App = observer(() => {
54+
return (
55+
<ThemeProvider theme={{ ...store.theme }}>
56+
<StyledApp visible={store.visible}>
57+
<UIStyle />
58+
<Title>{store.dialogTitle}</Title>
59+
<Row>
60+
<Label>Name</Label>
61+
<Input
62+
tabIndex={0}
63+
className="textfield"
64+
ref={store.titleRef}
65+
onChange={onChange}
66+
/>
67+
</Row>
68+
<Row>
69+
<Label>Folder</Label>
70+
<Dropdown
71+
dark={store.theme['dialog.lightForeground']}
72+
tabIndex={1}
73+
className="dropdown"
74+
onMouseDown={onDropdownClick}
75+
>
76+
{store.currentFolder && getBookmarkTitle(store.currentFolder)}
77+
</Dropdown>
78+
</Row>
79+
<Buttons>
80+
<Button onClick={onDone}>Done</Button>
81+
<Button
82+
onClick={onRemove}
83+
background={
84+
store.theme['dialog.lightForeground']
85+
? 'rgba(255, 255, 255, 0.08)'
86+
: 'rgba(0, 0, 0, 0.08)'
87+
}
88+
foreground={
89+
store.theme['dialog.lightForeground'] ? 'white' : 'black'
90+
}
91+
>
92+
Remove
93+
</Button>
94+
</Buttons>
95+
</StyledApp>
96+
</ThemeProvider>
97+
);
98+
});

src/renderer/views/app/components/App/index.tsx

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import { observer } from 'mobx-react-lite';
2-
import { hot } from 'react-hot-loader/root';
32
import * as React from 'react';
43
import { ThemeProvider } from 'styled-components';
54

@@ -19,25 +18,26 @@ import {
1918
} from '~/constants/design';
2019

2120
const onAppLeave = () => {
22-
store.barHideTimer = setTimeout(
23-
function () {
24-
if (Object.keys(store.dialogsVisibility).some(k => store.dialogsVisibility[k])) {
25-
onAppLeave()
26-
} else {
27-
store.titlebarVisible = false;
28-
}
29-
},
30-
500
31-
);
32-
}
21+
store.barHideTimer = setTimeout(function () {
22+
if (
23+
Object.keys(store.dialogsVisibility).some(
24+
(k) => store.dialogsVisibility[k],
25+
)
26+
) {
27+
onAppLeave();
28+
} else {
29+
store.titlebarVisible = false;
30+
}
31+
}, 500);
32+
};
3333

3434
const onAppEnter = () => {
3535
clearTimeout(store.barHideTimer);
36-
}
36+
};
3737

3838
const onLineEnter = () => {
3939
store.titlebarVisible = true;
40-
}
40+
};
4141

4242
const App = observer(() => {
4343
return (
@@ -55,7 +55,13 @@ const App = observer(() => {
5555
tabHeight: store.isCompact ? COMPACT_TAB_HEIGHT : DEFAULT_TAB_HEIGHT,
5656
}}
5757
>
58-
<StyledApp onMouseOver={store.isFullscreen ? onAppEnter : undefined} onMouseLeave={store.isFullscreen ? onAppLeave : undefined} style={{ height: !store.isFullscreen || store.titlebarVisible ? null : 0 }}>
58+
<StyledApp
59+
onMouseOver={store.isFullscreen ? onAppEnter : undefined}
60+
onMouseLeave={store.isFullscreen ? onAppLeave : undefined}
61+
style={{
62+
height: !store.isFullscreen || store.titlebarVisible ? null : 0,
63+
}}
64+
>
5965
<UIStyle />
6066
<Titlebar />
6167
{store.settings.object.topBarVariant === 'default' && <Toolbar />}
@@ -69,4 +75,4 @@ const App = observer(() => {
6975
);
7076
});
7177

72-
export default hot(App);
78+
export default App;

0 commit comments

Comments
 (0)