Skip to content

Commit 0f0c681

Browse files
authored
Merge pull request #16 from grimmerk/update_electron_ts_version
Update electron ts version & add Code Explainer Feature section in doc
2 parents 30ba9f9 + e048e71 commit 0f0c681

File tree

10 files changed

+1773
-1238
lines changed

10 files changed

+1773
-1238
lines changed

README.md

Lines changed: 5 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -57,43 +57,15 @@ Use this to quickly open and switch VS Code projects.
5757
8. [fixed] close the packaged app via cmd+q seems not close SwitchV-server-macos process? check by command: lsof -i:55688. Use ctrl+c to stop development (running via yarn start) is OK. (add close button on tray to help? I guess it is not helping).
5858
1. Solved by electron sending kill server process in the before-quick event handler. Another person suggests to add one more step to handle SIGINT signal on server side, ref https://stackoverflow.com/questions/71523442/child-process-doesnt-exit.
5959

60-
### debugger issue
60+
### Use VS Code Debugger
6161

6262
**To debug main process**
6363

64-
Below is a workaround way to debug main process: Its reference is
65-
https://github.com/electron-userland/electron-forge/issues/1369#issuecomment-1172913835
66-
64+
In VS Code Run and Debug, choose `Electron: Main Process` to launch and debug.
6765

68-
```json
69-
{
70-
"type": "node",
71-
"request": "launch",
72-
"name": "Electron Main",
73-
"runtimeExecutable": "npm",
74-
"runtimeArgs": [
75-
"run",
76-
"start",
77-
],
78-
"cwd": "${workspaceFolder}"
79-
}
80-
```
81-
82-
electron-forge official site only mention how to debug main process but it has a bug
83-
https://github.com/electron-userland/electron-forge/issues/1369
84-
85-
```json
86-
{
87-
"runtimeExecutable": "${workspaceFolder}/node_modules/.bin/electron-forge-vscode-nix",
88-
}
89-
```
90-
91-
Error: Cannot find module '/Users/liamdawson/w/@electron-forge/cli/dist/electron-forge-start'
92-
93-
94-
**To debug render process (workaround way)**
66+
**To debug render process (below set up becomes broken after the timing updating electron 29 and add 2nd window, please directly set up breakpoints in the opened dev tool instead) **
9567

96-
[electron site](https://www.electronjs.org/docs/latest/tutorial/debugging-vscode) and [ms github site](https://github.com/Microsoft/vscode-recipes/tree/master/Electron) both mention below setting to debug main proces
68+
[electron site](https://www.electronjs.org/docs/latest/tutorial/debugging-vscode) and [ms github site](https://github.com/Microsoft/vscode-recipes/tree/master/Electron) both mention below setting to debug main process
9769

9870

9971
```json
@@ -107,7 +79,7 @@ and ms github site has a extra setting for debugging render process. But the abo
10779
1. `yarn start` (to start webpack server part)
10880
2. launch compound "Electron: All" launch setting (from ms github site) to debug main & **render processes**.
10981

110-
The drawback is you will see two copy of SwitchV. And attaching render process takes a little time (e.g. only stop at some breakpoints after a while/refresh).
82+
The drawback is you will see two copy of SwitchV. And attaching render process takes a little time (e.g. only stop at some breakpoints after a while/refresh).~~
11183

11284
## notes about packaging a macOS app
11385

electron/.vscode/launch.json

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,27 @@
22
"version": "0.2.0",
33
"configurations": [
44
{
5-
"name": "Node.js - Debug Current File",
5+
"name": "Electron: Main Process",
66
"type": "node",
77
"request": "launch",
8-
"program": "${file}"
8+
"cwd": "${workspaceFolder}",
9+
"runtimeExecutable": "yarn",
10+
"windows": {
11+
"runtimeExecutable": "yarn.cmd"
12+
},
13+
"runtimeArgs": [
14+
"start"
15+
],
16+
"outputCapture": "std",
917
},
1018
{
19+
"name": "Debug Current File",
1120
"type": "node",
1221
"request": "launch",
13-
"name": "Electron Main",
14-
"runtimeExecutable": "npm",
15-
"runtimeArgs": [
16-
"run",
17-
"start",
18-
"--remote-debugging-port=9223"
19-
],
20-
"cwd": "${workspaceFolder}"
22+
"program": "${file}",
23+
"skipFiles": [
24+
"<node_internals>/**"
25+
]
2126
},
2227
{
2328
"type": "node",

electron/forge.config.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@ import { WebpackPlugin } from '@electron-forge/plugin-webpack';
88
import { mainConfig } from './webpack.main.config';
99
import { rendererConfig } from './webpack.renderer.config';
1010

11-
const fs = require('fs');
11+
import * as fs from 'fs';
1212

13+
// Ensure compatibility with Electron Forge v7
1314
const config: ForgeConfig = {
1415
hooks: {
1516
generateAssets: async () => {

electron/package.json

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,59 +6,59 @@
66
"main": ".webpack/main",
77
"scripts": {
88
"db": "prisma migrate dev",
9-
"start": "NODE_ENV=development electron-forge start",
10-
"dev": "EMBEDSERVER=1 NODE_ENV=development electron-forge start",
11-
"start:explainer": "NODE_ENV=development electron-forge start",
9+
"start": "cross-env NODE_ENV=development electron-forge start",
10+
"dev": "cross-env EMBEDSERVER=1 NODE_ENV=development electron-forge start",
11+
"start:explainer": "cross-env NODE_ENV=development electron-forge start",
1212
"package": "electron-forge package",
13-
"package_mas": "npm run prebuild && BUILD_TYPE=prod electron-forge package --platform=mas && npm run postbuild",
13+
"package_mas": "npm run prebuild && cross-env BUILD_TYPE=prod electron-forge package --platform=darwin -- --mas && npm run postbuild",
1414
"prebuild": "sh prebuild.sh",
1515
"postbuild": "sh postbuild.sh",
16-
"make": "npm run prebuild && BUILD_TYPE=prod electron-forge make && npm run postbuild",
17-
"make_mas": "npm run prebuild && BUILD_TYPE=prod electron-forge make --platform=mas && npm run postbuild",
18-
"make:staging": "npm run prebuild && BUILD_TYPE=staging electron-forge make && npm run postbuild",
16+
"make": "npm run prebuild && cross-env BUILD_TYPE=prod electron-forge make && npm run postbuild",
17+
"make_mas": "npm run prebuild && cross-env BUILD_TYPE=prod electron-forge make --platform=darwin -- --mas && npm run postbuild",
18+
"make:staging": "npm run prebuild && cross-env BUILD_TYPE=staging electron-forge make && npm run postbuild",
1919
"make-x86": "electron-forge make --arch=x64 --platform=darwin",
2020
"publish": "electron-forge publish",
2121
"lint": "eslint --ext .ts,.tsx .",
22-
"db:migrate": "prisma migrate dev"
22+
"db:migrate": "prisma migrate dev",
23+
"watch": "webpack --watch"
24+
2325
},
2426
"keywords": [],
2527
"author": {
2628
"name": "Grimmer",
27-
"email": "grimmer0125@gmail.com"
29+
"email": "k@grimmer.com"
2830
},
2931
"license": "MIT",
30-
"config": {
31-
"forge": "./config.forge.js"
32-
},
3332
"devDependencies": {
34-
"@electron-forge/cli": "^6.0.4",
35-
"@electron-forge/maker-deb": "^6.0.4",
36-
"@electron-forge/maker-rpm": "^6.0.4",
37-
"@electron-forge/maker-squirrel": "^6.0.4",
38-
"@electron-forge/maker-zip": "^6.0.4",
39-
"@electron-forge/plugin-webpack": "^6.0.4",
33+
"@electron-forge/cli": "^7.2.0",
34+
"@electron-forge/maker-deb": "^7.2.0",
35+
"@electron-forge/maker-rpm": "^7.2.0",
36+
"@electron-forge/maker-squirrel": "^7.2.0",
37+
"@electron-forge/maker-zip": "^7.2.0",
38+
"@electron-forge/plugin-webpack": "^7.2.0",
4039
"@types/express": "^4.17.17",
41-
"@types/react": "^18.0.15",
42-
"@types/react-dom": "^18.0.6",
40+
"@types/react": "^18.2.51",
41+
"@types/react-dom": "^18.2.18",
4342
"@types/react-highlight-words": "^0.16.4",
4443
"@types/react-syntax-highlighter": "^15.5.13",
45-
"@typescript-eslint/eslint-plugin": "^5.0.0",
46-
"@typescript-eslint/parser": "^5.0.0",
44+
"@typescript-eslint/eslint-plugin": "^6.21.0",
45+
"@typescript-eslint/parser": "^6.21.0",
4746
"@vercel/webpack-asset-relocator-loader": "^1.7.3",
4847
"copy-webpack-plugin": "^11.0.0",
48+
"cross-env": "^7.0.3",
4949
"css-loader": "^6.0.0",
50-
"electron": "^22.0.0",
51-
"eslint": "^8.0.1",
52-
"eslint-config-prettier": "^8.5.0",
53-
"eslint-plugin-import": "^2.25.0",
54-
"eslint-plugin-prettier": "^4.2.1",
55-
"fork-ts-checker-webpack-plugin": "^7.2.14",
50+
"electron": "^29.4.6",
51+
"eslint": "^8.56.0",
52+
"eslint-config-prettier": "^9.1.0",
53+
"eslint-plugin-import": "^2.29.1",
54+
"eslint-plugin-prettier": "^5.1.3",
55+
"fork-ts-checker-webpack-plugin": "^9.0.2",
5656
"node-loader": "^2.0.0",
57-
"prettier": "^2.8.1",
58-
"style-loader": "^3.0.0",
59-
"ts-loader": "^9.2.2",
60-
"ts-node": "^10.9.1",
61-
"typescript": "~4.5.4",
57+
"prettier": "^3.2.5",
58+
"style-loader": "^3.3.4",
59+
"ts-loader": "^9.5.1",
60+
"ts-node": "^10.9.2",
61+
"typescript": "~5.3.3",
6262
"webpack-node-externals": "^3.0.0"
6363
},
6464
"dependencies": {
@@ -82,8 +82,9 @@
8282
"react-highlight-words": "^0.18.0",
8383
"react-markdown": "^8.0.5",
8484
"react-select": "^5.4.0",
85-
"react-syntax-highlighter": "^15.5.0",
85+
"react-syntax-highlighter": "^15.5.0",
8686
"reflect-metadata": "^0.1.13",
87-
"remark-gfm": "^3.0.1"
87+
"remark-gfm": "^3.0.1",
88+
"rxjs": "^7.8.1"
8889
}
8990
}

electron/src/main.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ const createWindow = (): BrowserWindow => {
160160
width: 800,
161161
webPreferences: {
162162
preload: MAIN_WINDOW_PRELOAD_WEBPACK_ENTRY,
163-
devTools: false, //isDebug,
163+
devTools: true, //isDebug,
164164
},
165165

166166
// hide window by default

electron/tsconfig.json

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"compilerOptions": {
3-
"target": "ES6",
3+
"target": "ES2020",
44
"allowJs": true,
55
"module": "commonjs",
66
"skipLibCheck": true,
@@ -13,14 +13,23 @@
1313
"resolveJsonModule": true,
1414
"emitDecoratorMetadata": true,
1515
"experimentalDecorators": true,
16+
"forceConsistentCasingInFileNames": true,
17+
"useDefineForClassFields": true,
18+
"isolatedModules": true,
1619
"paths": {
1720
"*": [
1821
"node_modules/*"
1922
]
2023
},
21-
"jsx": "react"
24+
"jsx": "react-jsx",
25+
"lib": ["dom", "dom.iterable", "esnext"]
2226
},
2327
"include": [
2428
"src/**/*"
25-
]
29+
],
30+
"ts-node": {
31+
"compilerOptions": {
32+
"module": "commonjs"
33+
}
34+
}
2635
}

electron/webpack.main.config.ts

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ import type { Configuration } from 'webpack';
22

33
import { rules } from './webpack.rules';
44

5-
// eslint-disable-next-line @typescript-eslint/no-var-requires
6-
// const nodeExternals = require('webpack-node-externals');
7-
85
export const mainConfig: Configuration = {
96
/**
107
* This is the main entry point for your application, it's the first file
@@ -20,8 +17,20 @@ export const mainConfig: Configuration = {
2017
'@nestjs/websockets',
2118
'@nestjs/websockets/socket-module',
2219
'@nestjs/microservices/microservices-module',
23-
], //[nodeExternals()],
20+
'rxjs/add/observable/fromEvent',
21+
'rxjs/Observable',
22+
'swagger-ui-express',
23+
'class-validator',
24+
'class-transformer'
25+
],
2426
resolve: {
2527
extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'],
28+
fallback: {
29+
path: false,
30+
fs: false,
31+
child_process: false
32+
}
2633
},
34+
// Node.js polyfills are no longer included by default in webpack 5
35+
target: 'electron-main',
2736
};

electron/webpack.renderer.config.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@ export const rendererConfig: Configuration = {
1414
},
1515
plugins,
1616
resolve: {
17-
extensions: ['.js', '.ts', '.jsx', '.tsx', '.css'],
17+
extensions: ['.js', '.ts', '.jsx', '.tsx', '.css', '.json'],
18+
fallback: {
19+
path: false,
20+
fs: false
21+
}
1822
},
23+
// For Electron 28+, we need to use web instead of electron-renderer for security reasons
24+
// but need to provide node integration for compatibility
25+
target: 'web',
26+
// These are needed for webpack hot reloading to work with Electron's contextIsolation
27+
output: {
28+
publicPath: '/',
29+
globalObject: 'globalThis'
30+
}
1931
};

0 commit comments

Comments
 (0)