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

Electron+Sequelize+SQLite3主进程模块加载失败的解决方法

解决Electron+Vite环境下主进程无法加载Sequelize模型文件的问题

问题根源

报错Cannot find module './database/models/index.js'的核心原因有两个:

  1. 路径解析偏差:Vite构建主进程后,输出文件位于.vite/build目录,此时代码中的相对路径./database指向的是构建后的目录,而非源码中的src/database。
  2. 资源未被复制:Vite默认不会将非入口依赖的目录(如database)复制到构建输出目录,导致构建后目标文件不存在。

具体解决方案

1. 改用绝对路径定位模型文件

利用path.resolve结合__dirname构建绝对路径,确保无论构建前后都能正确找到文件:

"use strict";
const { app, BrowserWindow } = require("electron");
const path = require("node:path");
if (require("electron-squirrel-startup")) {
  app.quit();
}
// 替换原相对路径为绝对路径,根据你的实际文件结构调整层级
const db = require(path.resolve(__dirname, "../src/database/models/index.js"));
console.log(db);

// 剩余主进程代码不变
const createWindow = () => {
  const mainWindow = new BrowserWindow({
    width: 1500,
    height: 800,
    icon: path.resolve(__dirname, "../src/assets/images/logo.svg"), // 图标路径也建议改用绝对路径
    webPreferences: {
      preload: path.join(__dirname, "preload.js"),
      nodeIntegration: true
    }
  });
  mainWindow.loadURL("http://localhost:5173");
  mainWindow.webContents.openDevTools();
};

2. 配置Vite复制database目录到构建输出

通过Vite插件将源码中的database目录复制到构建后的.vite/build目录,确保构建后文件存在:

方法一:使用vite-plugin-copy插件

  1. 安装插件:
npm install vite-plugin-copy --save-dev
  1. 在vite.config.js中添加配置:
import { defineConfig } from 'vite';
import electron from 'vite-plugin-electron';
import copy from 'vite-plugin-copy';

export default defineConfig({
  plugins: [
    electron({
      main: {
        entry: 'src/main.js',
      },
    }),
    copy({
      targets: [
        { src: 'src/database/**/*', dest: '.vite/build/database' },
      ],
      hook: 'writeBundle' // 确保在构建完成后执行复制
    }),
  ],
});

方法二:手动添加复制逻辑(无需额外插件)

在vite.config.js的主进程构建配置中添加自定义复制逻辑:

import { defineConfig } from 'vite';
import electron from 'vite-plugin-electron';
import fs from 'fs-extra';

export default defineConfig({
  plugins: [
    electron({
      main: {
        entry: 'src/main.js',
        vite: {
          build: {
            plugins: [
              {
                name: 'copy-database',
                writeBundle() {
                  // 复制src/database到构建目录
                  fs.copySync('src/database', '.vite/build/database', { overwrite: true });
                },
              },
            ],
          },
        },
      },
    }),
  ],
});

3. 修正Sequelize数据库文件路径

确保Sequelize配置文件中的SQLite存储路径为绝对路径,避免数据库文件找不到:

// src/database/config/config.js
const path = require('node:path');

module.exports = {
  development: {
    dialect: 'sqlite',
    storage: path.resolve(__dirname, '../../database.sqlite'), // 用绝对路径定位数据库文件
    logging: false
  },
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:54:52