Skip to main content

本地开发

本指南帮助你快速搭建 Elftia 本地开发环境并开始编码。

前提条件

Node.js

项目要求 Node.js v24(参见项目根目录 .nvmrc)。推荐使用 nvmfnm 管理版本:

nvm install
nvm use

原生构建工具

项目依赖 better-sqlite3 等原生 Node.js 模块,需要 C/C++ 编译环境:

平台所需工具安装方式
WindowsVisual Studio Build Tools 2022npm install -g windows-build-tools 或从 VS 官网 安装
macOSXcode Command Line Toolsxcode-select --install
Linuxbuild-essential, python3sudo apt install build-essential python3 (Debian/Ubuntu)

其他依赖

  • Git >= 2.30
  • ripgrep (rg) — postinstall 脚本会自动下载,也可手动安装

初始化项目

# 1. 克隆仓库
git clone <repo-url> elftia
cd elftia

# 2. 安装依赖
npm install

npm installpostinstall 脚本会自动:

  • 重新编译原生模块(better-sqlite3node-pty 等)以匹配当前 Electron 版本
  • 下载平台对应的 ripgrep 二进制文件
# 3. 创建环境变量文件
cp .env.example .env

根据需要编辑 .env,填写 API Key 等配置。


启动开发模式

npm run dev

这会启动 electron-vite dev,同时监听三个目标的代码变更:

目标目录热重载
Main Processpackages/desktop/app/main/重启主进程
Preload Scriptpackages/desktop/app/preload/重启主进程
Rendererpackages/renderer/src/Vite HMR(端口 5375
tip

首次启动时如果遇到原生模块错误,尝试运行 npm run rebuild 重新编译。


所有开发命令

命令说明
npm run dev启动 Electron + Vite 开发模式(main + preload + renderer)
npm run dev:web仅启动 Renderer(Web 模式,无 Electron)
npm run dev:server启动 Fastify Web 服务端(可选)
npm run build构建所有包(renderer + desktop)
npm run build:renderer仅构建前端(Vite 生产模式)
npm run build:desktop仅构建 Electron 主进程(tsup)
npm run build:official构建官方发行版(含签名)
npm run build:steam构建 Steam 版本
npm run lint运行 ESLint + TypeScript 类型检查
npm run lint:eslint仅运行 ESLint
npm run typecheck仅运行 TypeScript 编译检查
npm run test运行 Vitest 测试
npm run formatPrettier 格式化全部代码
npm run format:file <path>Prettier 格式化单个文件
npm run verify:build验证构建产物大小(4 项关键指标)
npm run analyze:build分析 bundle 组成(chunk 分类统计)

调试

主进程调试

方法一:--inspect 标志

# 在 package.json 的 dev 脚本中添加 --inspect
# 或直接运行:
electron --inspect=9229 .

然后在 Chrome 中访问 chrome://inspect,连接到主进程。

方法二:VS Code

.vscode/launch.json 中添加以下配置:

{
"type": "node",
"request": "attach",
"name": "Attach to Main Process",
"port": 9229,
"skipFiles": ["<node_internals>/**"]
}

渲染进程调试

Ctrl+Shift+I(Windows/Linux)或 Cmd+Option+I(macOS)打开 DevTools。

DevTools 支持:

  • React DevTools — 安装对应浏览器扩展后自动加载
  • Network — 监控 IPC 调用(以 invoke 形式出现)
  • Performance — 分析渲染性能

日志系统

Elftia 使用 Winston 进行日志管理。

环境变量说明默认值
LOG_LEVEL日志级别 (debug / info / warn / error)info

日志文件存储位置:

平台路径
Windows%APPDATA%/elftia/logs/
macOS~/Library/Application Support/elftia/logs/
Linux~/.config/elftia/logs/

开发 vs 生产差异

方面开发模式生产模式
前端服务Vite Dev Server (HMR)静态文件(file://
源码映射开启关闭
压缩Terser(移除 console.log
代码分割全量加载React.lazy 按路由分割
CSP宽松严格
DevTools自动打开默认隐藏(开发者模式可启用)
数据库开发用户数据目录正式用户数据目录
日志级别debuginfo

Worker 线程

Elftia 在主进程中启动多个 Worker 线程以避免阻塞 IPC:

Worker文件职责
db.workerworkers/db/SQLite 读写操作
fileSearch.workerworkers/fileSearch/文件内容搜索(ripgrep)
fileWatcher.workerworkers/fileWatcher/文件系统变更监听
mcp.workerworkers/mcp/MCP 服务器通信
diagnostics.workerworkers/diagnostics/系统诊断信息收集
project.workerworkers/project/项目目录索引

开发模式下,Worker 使用 ts-node 直接运行 TypeScript 源码;生产模式下,Worker 被 tsup 编译为独立 JS 文件。


常见问题

原生模块编译失败

# 清理并重新安装
rm -rf node_modules
npm install

# 或仅重新编译原生模块
npm run rebuild

端口被占用

Vite Dev Server 默认使用端口 5375。如果被占用:

# 查找占用进程
lsof -i :5375 # macOS/Linux
netstat -ano | findstr :5375 # Windows

数据库锁定

如果出现 "database is locked" 错误,确保没有多个 Elftia 实例在运行。开发时可使用诊断功能导出数据库状态:

window.api.diagnostics.dump()