diff --git a/main/index.ts b/main/index.ts deleted file mode 100644 index 110aac3..0000000 --- a/main/index.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { join } from 'path' -import { app, BrowserWindow } from 'electron' - -const WINDOWS: Record = { - main: null, - win1: null, -} - -function mainWin() { - WINDOWS.main = new BrowserWindow({ - title: 'Main window', - webPreferences: { - preload: join(__dirname, '../preload/index.main') - }, - }) - - if (app.isPackaged) { - WINDOWS.main.loadFile(join(__dirname, '../react-ts/index.html')) - } else { - WINDOWS.main.loadURL(`http://127.0.0.1:${process.env.PORT}`) - WINDOWS.main.maximize() - } - -} - -app.whenReady().then(mainWin) -app.on('window-all-closed', () => { - Object.keys(WINDOWS).forEach((key) => WINDOWS[key] = null) -}) diff --git a/preload/index.win1.ts b/preload/index.win1.ts deleted file mode 100644 index 562867d..0000000 --- a/preload/index.win1.ts +++ /dev/null @@ -1 +0,0 @@ -console.log('index.win1.ts') \ No newline at end of file diff --git a/preload/utils.ts b/preload/utils.ts deleted file mode 100644 index 5405abf..0000000 --- a/preload/utils.ts +++ /dev/null @@ -1,49 +0,0 @@ - -/** docoment ready */ -export function domReady(condition: DocumentReadyState[] = ['complete', 'interactive']) { - return new Promise(resolve => { - if (condition.includes(document.readyState)) { - resolve(true) - } else { - document.addEventListener('readystatechange', () => { - if (condition.includes(document.readyState)) { - resolve(true) - } - }) - } - }) -} - -/** Inject ws related code */ -export function injectWsCode(options: { - host: string - port: string | number -}) { - const oScript = document.createElement('script') - oScript.id = 'ws-preload-hot-reload' - - oScript.innerHTML = ` -${__ws_hot_reload_for_preload.toString()} -${__ws_hot_reload_for_preload.name}(${JSON.stringify(options)}) -` - - document.body.appendChild(oScript) -} - -function __ws_hot_reload_for_preload(options: { host: string; port: string | number }) { - const ws = new WebSocket(`ws://${options.host}:${options.port}`) - ws.onmessage = function (ev) { - try { - console.log('[preload] ws.onmessage:', ev.data) - - const data = JSON.parse(ev.data) // { "cmd": "string", data: "string|number" } - - if (data.cmd === 'reload') { - setTimeout(() => window.location.reload(), 999) - } - } catch (error) { - console.warn(`ws.onmessage should be accept "JSON.string" formatted string.`) - console.error(error) - } - } -} diff --git a/src/main/index.ts b/src/main/index.ts new file mode 100644 index 0000000..d150a54 --- /dev/null +++ b/src/main/index.ts @@ -0,0 +1,29 @@ +import { join } from 'path' +import { app, BrowserWindow } from 'electron' + +let win: BrowserWindow | null = null + +async function mainWin() { + win = new BrowserWindow({ + title: 'Main window', + webPreferences: { + preload: join(__dirname, '../preload/index.cjs') + }, + }) + + if (app.isPackaged) { + win.loadFile(join(__dirname, '../react-ts/index.html')) + } else { + const pkg = await import('../../package.json') + const url = `http://${pkg.env.HOST || '127.0.0.1'}:${pkg.env.PORT}` + + win.loadURL(url) + win.maximize() + } +} + +app.whenReady().then(mainWin) +app.on('window-all-closed', () => { + win = null + app.quit() +}) diff --git a/src/main/vite.config.ts b/src/main/vite.config.ts new file mode 100644 index 0000000..5b7308c --- /dev/null +++ b/src/main/vite.config.ts @@ -0,0 +1,27 @@ +import { join } from 'path' +import { builtinModules } from 'module' +import { defineConfig } from 'vite' + +export default defineConfig({ + mode: process.env.NODE_ENV, + root: __dirname, + build: { + outDir: join(process.cwd(), 'dist/main'), + lib: { + entry: 'index.ts', + formats: ['cjs'], + }, + sourcemap: false, + minify: false, + emptyOutDir: true, + rollupOptions: { + external: [ + ...builtinModules, + 'electron', + ], + output: { + entryFileNames: '[name].cjs', + }, + }, + }, +}) diff --git a/preload/index.main.ts b/src/preload/index.ts similarity index 77% rename from preload/index.main.ts rename to src/preload/index.ts index 178376c..0121e9b 100644 --- a/preload/index.main.ts +++ b/src/preload/index.ts @@ -1,7 +1,7 @@ import fs from 'fs' import path from 'path' import { contextBridge, ipcRenderer } from 'electron' -import { domReady, injectWsCode } from './utils' +import { domReady } from './utils' import { useLoading } from './loading' const isDev = process.env.NODE_ENV === 'development' @@ -11,10 +11,6 @@ const { appendLoading, removeLoading } = useLoading() await domReady() appendLoading() - isDev && injectWsCode({ - host: '127.0.0.1', - port: process.env.PORT_WS as string, - }) })(); // --------------------------------------------------- diff --git a/preload/loading.ts b/src/preload/loading.ts similarity index 100% rename from preload/loading.ts rename to src/preload/loading.ts diff --git a/src/preload/utils.ts b/src/preload/utils.ts new file mode 100644 index 0000000..7dd3280 --- /dev/null +++ b/src/preload/utils.ts @@ -0,0 +1,15 @@ + +/** docoment ready */ +export function domReady(condition: DocumentReadyState[] = ['complete', 'interactive']) { + return new Promise(resolve => { + if (condition.includes(document.readyState)) { + resolve(true) + } else { + document.addEventListener('readystatechange', () => { + if (condition.includes(document.readyState)) { + resolve(true) + } + }) + } + }) +} diff --git a/src/preload/vite.config.ts b/src/preload/vite.config.ts new file mode 100644 index 0000000..b7f552e --- /dev/null +++ b/src/preload/vite.config.ts @@ -0,0 +1,27 @@ +import { join } from 'path' +import { builtinModules } from 'module' +import { defineConfig } from 'vite' + +export default defineConfig({ + mode: process.env.NODE_ENV, + root: __dirname, + build: { + outDir: join(process.cwd(), 'dist/preload'), + lib: { + entry: 'index.ts', + formats: ['cjs'], + }, + sourcemap: false, + minify: false, + emptyOutDir: true, + rollupOptions: { + external: [ + ...builtinModules, + 'electron', + ], + output: { + entryFileNames: '[name].cjs', + }, + }, + }, +}) diff --git a/react-ts/.gitignore b/src/react-ts/.gitignore similarity index 100% rename from react-ts/.gitignore rename to src/react-ts/.gitignore diff --git a/react-ts/index.html b/src/react-ts/index.html similarity index 100% rename from react-ts/index.html rename to src/react-ts/index.html diff --git a/react-ts/package.json.txt b/src/react-ts/package.json.txt similarity index 100% rename from react-ts/package.json.txt rename to src/react-ts/package.json.txt diff --git a/react-ts/src/App.css b/src/react-ts/src/App.css similarity index 100% rename from react-ts/src/App.css rename to src/react-ts/src/App.css diff --git a/react-ts/src/App.tsx b/src/react-ts/src/App.tsx similarity index 100% rename from react-ts/src/App.tsx rename to src/react-ts/src/App.tsx diff --git a/react-ts/src/electron.png b/src/react-ts/src/electron.png similarity index 100% rename from react-ts/src/electron.png rename to src/react-ts/src/electron.png diff --git a/react-ts/src/favicon.svg b/src/react-ts/src/favicon.svg similarity index 100% rename from react-ts/src/favicon.svg rename to src/react-ts/src/favicon.svg diff --git a/react-ts/src/global.d.ts b/src/react-ts/src/global.d.ts similarity index 100% rename from react-ts/src/global.d.ts rename to src/react-ts/src/global.d.ts diff --git a/react-ts/src/index.css b/src/react-ts/src/index.css similarity index 100% rename from react-ts/src/index.css rename to src/react-ts/src/index.css diff --git a/react-ts/src/logo.svg b/src/react-ts/src/logo.svg similarity index 100% rename from react-ts/src/logo.svg rename to src/react-ts/src/logo.svg diff --git a/react-ts/src/main.tsx b/src/react-ts/src/main.tsx similarity index 100% rename from react-ts/src/main.tsx rename to src/react-ts/src/main.tsx diff --git a/react-ts/src/vite-env.d.ts b/src/react-ts/src/vite-env.d.ts similarity index 100% rename from react-ts/src/vite-env.d.ts rename to src/react-ts/src/vite-env.d.ts diff --git a/react-ts/tsconfig.json b/src/react-ts/tsconfig.json similarity index 93% rename from react-ts/tsconfig.json rename to src/react-ts/tsconfig.json index 8d09282..365d212 100644 --- a/react-ts/tsconfig.json +++ b/src/react-ts/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../paths.json", + "extends": "../../paths.json", "compilerOptions": { "target": "ESNext", "useDefineForClassFields": true, diff --git a/react-ts/vite.config.ts b/src/react-ts/vite.config.ts similarity index 81% rename from react-ts/vite.config.ts rename to src/react-ts/vite.config.ts index b447ba9..6dbad27 100644 --- a/react-ts/vite.config.ts +++ b/src/react-ts/vite.config.ts @@ -1,13 +1,15 @@ import { join } from 'path' import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' -import pkg from '../package.json' +import pkg from '../../package.json' // https://vitejs.dev/config/ export default defineConfig({ + root: __dirname, plugins: [react()], base: './', build: { + emptyOutDir: true, minify: false, outDir: join(process.cwd(), 'dist/react-ts'), },