Ash*_*nna 2 javascript reactjs electron electron-builder electron-react
我正在使用react.js构建一个电子应用程序。它在开发模式下工作正常,但在生产模式下不起作用。我已经在 public 中添加了main文件夹,你可以在main.js代码中的URL中看到我的生产错误。
我的文件夹结构
我的 main.js 代码 -
const { app, BrowserWindow, globalShortcut, shell } = require("electron");
const isDev = require("electron-is-dev");
const path = require("path");
const getIconPath = () => {
let ext = "png";
if (process.platform === "darwin") {
ext = "icns";
}
if (process.platform === "linux") {
ext = "png";
}
if (process.platform === "win32") {
ext = "ico";
}
let iconPath;
iconPath = isDev
? path.join(__dirname, "..", "assets", "app_icon", `icon.${ext}`)
: path.join(
__dirname,
"..",
"..",
"build",
"assets",
"app_icon",
`icon.${ext}`
);
return iconPath;
};
let mainWindow;
let splash;
function createWindow() {
splash = new BrowserWindow({
width: 600,
height: 400,
autoHideMenuBar: true,
center: true,
transparent: true,
frame: false,
show: false,
maximizable: false,
resizable: false,
minimizable: false,
alwaysOnTop: true,
});
mainWindow = new BrowserWindow({
minWidth: 500,
minHeight: 300,
show: false,
autoHideMenuBar: true,
icon: isDev ? getIconPath() : null,
webPreferences: {
contextIsolation: false,
nodeIntegration: true,
},
});
const mainWindowURL = isDev
? "http://localhost:3000"
: `file://${path.join(__dirname, "../", "../build/index.html")}`;
const splashURL = isDev
? "http://localhost:3000/splash"
: `file://${path.join(__dirname, "../", "../build/index.html#/splash")}`;
splash.loadURL(splashURL);
mainWindow.loadURL(mainWindowURL);
splash.once("ready-to-show", () => {
splash.show();
});
mainWindow.once("ready-to-show", () => {
setTimeout(() => {
splash.destroy();
// maximize the window
mainWindow.maximize();
mainWindow.show();
}, 3000);
});
// production a bad jabe
const handleDevTools = () => {
if (mainWindow.webContents.isDevToolsOpened()) {
mainWindow.webContents.closeDevTools();
} else {
mainWindow.webContents.openDevTools();
}
};
globalShortcut.register("CommandOrControl+Shift+I", handleDevTools);
// mainWindow.webContents.openDevTools();
mainWindow.on("closed", () => {
mainWindow = null;
});
}
app.on("ready", createWindow);
app.on("window-all-closed", () => {
if (process.platform !== "darwin") {
app.quit();
}
});
app.on("activate", function () {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
Run Code Online (Sandbox Code Playgroud)
我的 router.js 代码与react-router-dom
import Splash from "../pages/Splash/Splash";
import Home from "../pages/Home/Home";
import Login from "../pages/Login/Login";
import Register from "../pages/Register/Register";
import { createBrowserRouter } from "react-router-dom";
const router = createBrowserRouter([
{
path: "/",
children: [
{
path: "/",
element: <Home />,
},
{
path: "/splash",
element: <Splash />,
},
{
path: "/login",
element: <Login />,
},
{
path: "/register",
element: <Register />,
},
],
},
]);
export default router;
Run Code Online (Sandbox Code Playgroud)
当我以电子构建器构建的生产模式运行该项目时。这显示了
错误 - 意外的应用程序错误!404 未找到
您的启动窗口的 url 使用散列 ( #
),但您使用createBrowserRouter
. Electron 和 React 上的路由仅适用于HashRouter
,因此您应该替换createBrowserRouter
为createHashRouter
。
此外,您可能需要在以下位置写入哈希路径path.join()
:
`file://${path.join(__dirname, "../", "../build/index.html")}#/splash`
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3189 次 |
最近记录: |