我用vite开发了一个react应用程序,我试图用Electron将其转换为桌面应用程序。当我在开发模式下运行electron时,一切正常;但在我的生产中,我得到:
404 Not Found Not Found
下面是electron/main文件夹中的Main.js文件
import { app, BrowserWindow, shell, ipcMain, Menu } from 'electron'
import { release } from 'node:os'
import { join } from 'node:path'
import { update } from './update'
const isDev = process.env.NODE_ENV !== 'production';
process.env.DIST_ELECTRON = join(__dirname, '../')
process.env.DIST = join(process.env.DIST_ELECTRON, '../dist')
process.env.PUBLIC = process.env.VITE_DEV_SERVER_URL
? join(process.env.DIST_ELECTRON, '../public')
: process.env.DIST
// Disable GPU Acceleration for Windows 7
if (release().startsWith('6.1')) app.disableHardwareAcceleration()
// Set application name for Windows 10+ notifications
if (process.platform === 'win32') app.setAppUserModelId(app.getName())
if (!app.requestSingleInstanceLock()) {
app.quit()
process.exit(0)
}
// Remove electron security warnings
// This warning only shows in development mode
// Read more on https://www.electronjs.org/docs/latest/tutorial/security
// process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true'
let win: BrowserWindow | null = null
// Here, you can also use other preload
const preload = join(__dirname, '../preload/index.js')
const url = process.env.VITE_DEV_SERVER_URL;
const indexHtml = join(process.env.DIST, 'index.html')
//const indexHtml = join(__dirname, '../../index.html')
async function createWindow() {
win = new BrowserWindow({
title: 'Dispute Resolution',
icon: join(process.env.PUBLIC, 'light.png'),
webPreferences: {
preload,
// Warning: Enable nodeIntegration and disable contextIsolation is not secure in production
// Consider using contextBridge.exposeInMainWorld
// Read more on https://www.electronjs.org/docs/latest/tutorial/context-isolation
nodeIntegration: true,
contextIsolation: false,
//devTools: false // This will disable dev tools
},
})
Menu.setApplicationMenu(null);
if(isDev){
// win.webContents.openDevTools;
//win.webContents.closeDevTools
}
if (url) { // electron-vite-vue#298
win.loadURL(url)
// Open devTool if the app is not packaged
win.webContents.openDevTools()
} else {
win.loadFile(indexHtml);
win.webContents.openDevTools()
}
// Test actively push message to the Electron-Renderer
/*win.webContents.on('did-finish-load', () => {
win?.webContents.send('main-process-message', new Date().toLocaleString())
})*/
// Make all links open with the browser, not with the application
win.webContents.setWindowOpenHandler(({ url }) => {
if (url.startsWith('https:')) shell.openExternal(url)
return { action: 'deny' }
})
// Apply electron-updater
update(win)
}
app.whenReady().then(createWindow)
app.on('window-all-closed', () => {
win = null
if (process.platform !== 'darwin') app.quit()
})
app.on('second-instance', () => {
if (win) {
// Focus on the main window if the user tried to open another
if (win.isMinimized()) win.restore()
win.focus()
}
})
app.on('activate', () => {
const allWindows = BrowserWindow.getAllWindows()
if (allWindows.length) {
allWindows[0].focus()
} else {
createWindow()
}
})
// New window example arg: new windows url
ipcMain.handle('open-win', (_, arg) => {
const childWindow = new BrowserWindow({
webPreferences: {
preload,
nodeIntegration: true,
contextIsolation: false,
},
})
if (process.env.VITE_DEV_SERVER_URL) {
childWindow.loadURL(`${url}#${arg}`)
} else {
childWindow.loadFile(indexHtml, { hash: arg })
}
})
字符串
App.jsx
import './App.css';
import Login from './components/Login/Login';
import Register from './components/Register/Register';
import Otp from './components/Otp/otp';
// Private Routes
import Sidebar from './components/Sidebar/Sidebar';
import Dashboard from './components/Dashboard Section/Dashboard';
import ForgotPassword from './components/ForgotPassword/ForgotPassword';
import PasswordUpdate from './components/PasswordUpdate/PasswordUpdate';
import Profile from './components/Profile/Profile';
import RaiseDispute from './components/Raise Dispute/RaiseDispute'
import DisputeListing from './components/Dispute Listing/DisputeListing'
import Transactions from './components/Transactions Listing/Transactions';
import {
createBrowserRouter,
RouterProvider
} from 'react-router-dom';
//Create router
const router = createBrowserRouter([
{
path: '/',
element: <div><Login /></div>
},
{
path: '/Register',
element: <div><Register /></div>
},
{
path: '/Otp',
element: <div><Otp /></div>
},
{
path: '/Dashboard',
element: <div className='container'><Dashboard/></div>
},
{
path: '/raise-dispute',
element: <div className='container'><RaiseDispute/></div>
},
{
path: '/disputes-listing',
element: <div className='container'><DisputeListing/></div>
},
{
path: '/transactions-listing',
element: <div className='container'><Transactions/></div>
}
])
function App() {
return (
<div>
<RouterProvider router = {router} />
</div>
)
}
export default App
型
1条答案
按热度按时间ogq8wdun1#
对于这种情况,可能有2种解决方案:
1.正在使用基本名称。
第一个月
1.使用内存路由器代替浏览器路由器。
字符串