Li os documentos e muitas postagens (aqui e em outros lugares) sobre este assunto sem nenhuma alegria até agora
É um aplicativo TypeScript Electron criado com o aplicativo Electron-Vite , desenvolvido no VS Code
// package.json
"scripts": {
"dev": "electron-vite dev -w",
Ele inicia através do seu main.ts
arquivo
// main.ts
imports here...
console.log('main start');
const ipcListener = new IpcListener<IpcHandlerEvents>();
const ipcEmitter = new IpcEmitter<IpcRendererEvents>();
O main.ts
arquivo cria o BrowserWindow e com um arquivo de pré-carregamento
const mainWindow = new BrowserWindow({
show: false,
autoHideMenuBar: true,
webPreferences: {
preload: join(__dirname, '../preload/preload.js'),
sandbox: process.env.NODE_ENV !== 'test',
},
});
E preload.ts
começa de forma semelhante amain.ts
// preload.ts
imports here...
console.log('preload start');
if (process.contextIsolated) {
try {
O principal index.tsx
no processo de renderização então começa
// index.tsx
imports here...
console.log('index start');
Que preenche o conteúdo via createRoot
createRoot(document.getElementById('root') as HTMLElement).render(
<StrictMode>
<RouterProvider
router={createHashRouter(getRoutesConfig(store), {
future: {
v7_relativeSplatPath: true,
v7_fetcherPersist: true,
v7_partialHydration: true,
v7_skipActionErrorRevalidation: true,
v7_normalizeFormMethod: true,
},
})}
future={{ v7_startTransition: true }}
/>
</StrictMode>
Finalmente exibindo root.tsx
como a, bem, raiz do aplicativo. Com um limite de erro
console.log('root start')
return (
<ReduxProvider store={store}>
<ErrorBoundary>
<App />
</ErrorBoundary>
</ReduxProvider>
);
Quando um erro é lançado, o limite de erro: armazena o estado atual; então informa o processo principal
localStorage.setItem('storeToLoad', JSON.stringify(state));
window.electron.ipcRenderer.send('ERROR_IN_WINDOW', {
error,
errorInfo,
});
Que por sua vez tenta reiniciar o aplicativo após sair
// main.ts
ipcListener.on('ERROR_IN_WINDOW', (_, args: unknown) => {
console.log('error in window - relaunch');
app.relaunch();
app.exit();
});
Então, quando alguém executa o aplicativo pela primeira vez, este log é mostrado
// in VS Code terminal
main start
// in app console
preload start
index start
root start
Mas quando um erro é lançado e o aplicativo é 'reiniciado' (cof cof), isso é o que é mostrado
// in VS Code terminal
AB C:\development\AppDir\App> (ie: the process ends)
// in app console
preload start
E o aplicativo reiniciado é apenas um retângulo branco
Obviamente esse não é o resultado desejado. Alguma ideia de como eu poderia chegar ao resultado desejado (pls, obg)?
Graças a esta postagem de alex8088 descobri que:
Correndo
electron-vite preview
em vez deelectron-vite dev -w
eapp.relaunch()
funciona bem. Ou funcionou para mim de qualquer maneira. Obrigado Alex