You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Electron-Vite-React项目Node服务进程路径配置问题求助

解决Electron-Vite-React中fork Node服务找不到文件的问题

问题根源

Vite打包Electron项目时,默认仅处理main、renderer、preload三个目录的代码,你放在src/server下的文件未被纳入打包流程,导致编译后out目录缺少服务端代码,fork时自然找不到目标文件。

解决方案

1. 配置Vite打包server目录

根据你的代码类型选择以下两种方式:

方式一:直接复制server目录文件(适合无需编译的CommonJS代码)

  • 先安装rollup-plugin-copy插件:
    npm install rollup-plugin-copy --save-dev
    
  • 修改electron-vite.config.js,在main的build配置中添加复制规则:
    import { defineConfig } from 'electron-vite'
    import { resolve } from 'path'
    import copy from 'rollup-plugin-copy'
    
    export default defineConfig({
      main: {
        build: {
          rollupOptions: {
            plugins: [
              copy({
                targets: [
                  {
                    src: resolve(__dirname, 'src/server/**/*'),
                    dest: resolve(__dirname, 'out/server')
                  }
                ],
                hook: 'writeBundle' // 打包完成后执行复制
              })
            ]
          }
        }
      },
      // 保留原有renderer、preload配置
      renderer: {},
      preload: {}
    })
    

方式二:将server作为额外入口编译(适合ES模块代码)

如果server目录下的代码需要编译(比如使用ES模块语法),可把它作为main的额外入口:

import { defineConfig } from 'electron-vite'
import { resolve } from 'path'

export default defineConfig({
  main: {
    build: {
      rollupOptions: {
        input: {
          main: resolve(__dirname, 'src/main/index.js'),
          server: resolve(__dirname, 'src/server/server.js')
        },
        output: {
          dir: resolve(__dirname, 'out'),
          entryFileNames: '[name]/index.js' // 编译后server代码输出到out/server/index.js
        }
      }
    }
  },
  // 保留原有renderer、preload配置
  renderer: {},
  preload: {}
})

2. 调整fork路径适配环境

区分开发和生产环境,确保能正确定位server文件:

import { fork } from 'child_process'
import { resolve } from 'path'
import { app } from 'electron'

const isDev = !app.isPackaged
let serverPath

if (isDev) {
  // 开发环境直接指向src下的server.js
  serverPath = resolve(__dirname, '../server/server.js')
} else {
  // 生产环境根据打包方式调整:
  // 复制方式用../server/server.js,额外入口方式用../server/index.js
  serverPath = resolve(__dirname, '../server/server.js')
}

const serverProcess = fork(serverPath, {
  env: { PORT: 9090 }
})

3. 注意事项

  • 修正路径拼写:原代码中../sync/server.js应为../server/server.js(对应src下的server目录)
  • 打包后验证out/server目录是否存在目标文件,确保配置生效

内容的提问来源于stack exchange,提问作者skyconfusion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 06:15:03