开发者问题收集

在 Electron-forge 生成的 Electron 中的 React 中手动刷新后无法获取 /main_window/page 错误

2022-04-19
949

我按照 forge 指南 中的说明,使用“typescript + webpack”模板创建了一个 Electron forge 项目:

yarn create electron-app debugging-test --template=typescript-webpack

并按照指南中不同子页面的说明向其添加了 React:

yarn add react react-dom
yarn add --dev @types/react @types/react-dom

并像这样集成它:

{imports section}

ReactDOM.render(
  <React.StrictMode>
    <Provider store={store}>
      <Router>
        <Routes>
          <Route path='/main_window' element={<App />}>
            <Route index element={<HomePage />} />
            <Route path='about' element={<AboutPage />} />
            <Route path='login' element={<LoginPage />} />
            <Route path='*' element={<PageNotFound />} />
          </Route>
        </Routes>
      </Router>
    </Provider>
  </React.StrictMode>,
  reactAppDiv);

现在,当我使用 npm start 运行应用程序时,它工作正常,但是,例如,当显示登录页面并按下 ctrl + r 时,我收到一个空白页,显示 Cannot GET /main_window/page ,页面中出现 404 错误devtools。

刷新后出现 404 错误

我发现“纯”React 应用程序存在类似的问题,将下面的内容添加到 webpack 的配置中可以解决问题,但在我看来,将其添加到 packages.json 中的 webpack 插件配置中没有帮助。

"devServer": {
    historyApiFallback: true
},
2个回答

TLDR: 使用 HashRouter 而不是 Router

我遇到了同样的问题,并根据 这个答案 解决了它。以下是 react-router-dom-v5 react-router-dom-v6 的 HashRouter 文档。

在基于 electron-forge 的 webpack+typescript 模板的应用程序中使用 react-router-dom-v6 ,使用 HashRouter 解决了我的问题。

joba2ca
2022-08-12

在 forge 配置中,添加一个名称为空的 entryPoint。

类似于:

const config = {
  // ...
  plugins: [
    new WebpackPlugin({
      // ...
      renderer: {
        entryPoints: [
          {
            name: '',
            html: './src/index.html',
            js: './src/renderer.tsx',
            preload: {
              js: './src/preload.ts'
            }
          }
          // ...
        ]
      }
    })
  ]
}
Vadim Tatarincev
2023-04-28