简介
配置模块,负责加载、合并和提供运行时配置。支持两种加载模式:bundle 模式(从 esbuild 预注册的 globalThis.__EE_CONFIG_REGISTRY__ 读取)和 dev 模式(从文件系统加载)。配置文件可导出函数,接收 appInfo 参数以根据环境动态生成配置。
导入
// ESM
import { loadConfig, getConfig, setConfig, getAppInfo } from 'ee-core/config';
// CJS
const { loadConfig, getConfig, setConfig, getAppInfo } = require('ee-core/config');注意:loadConfig、getConfig 和 setConfig 也可从顶层入口(ee-core)导入,但 getAppInfo 仅从子路径(ee-core/config)导出。
// 顶层入口(不含 getAppInfo)
import { loadConfig, getConfig, setConfig } from 'ee-core';
const { loadConfig, getConfig, setConfig } = require('ee-core');API
loadConfig()
说明:加载并合并配置文件。在框架启动时由 ElectronEgg.init() 调用一次。使用 ConfigLoader 将框架默认配置与业务配置深度合并。加载顺序:defaultConfig(框架内置)→ config.default(业务默认)→ config.{env}(环境特定覆盖)。
参数:无
返回值:void — 配置存储在内部,后续通过 getConfig() 获取
示例:
import { loadConfig } from 'ee-core/config';
loadConfig(); // 通常由 ElectronEgg.init() 自动调用getConfig()
说明:获取最终合并的运行时配置对象。如果配置尚未加载(如在 loadConfig() 之前调用),会自动触发加载。通常在框架启动后使用,读取配置值。
参数:无
返回值:Config — 完整的运行时配置对象,包含所有合并后的设置
示例:
import { getConfig } from 'ee-core/config';
const config = getConfig();
console.log(config.logger.level); // 'info'
console.log(config.httpServer.port); // 7071
console.log(config.mainServer.protocol); // 'file://'参见:Config 类型定义
setConfig(cfg)
说明:直接设置运行时配置对象。用于子进程从主进程接收配置,避免文件系统加载在子进程中可能失败(如 bundle 输出目录缺少配置文件)。替换之前已加载的任何配置。
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cfg | Config | 是 | 要设置为运行时配置的完整配置对象 |
返回值:void
示例:
import { setConfig } from 'ee-core/config';
// 在子进程中,通过 IPC 从主进程接收配置
process.on('message', (msg) => {
if (msg.type === 'config') {
setConfig(msg.data);
}
});getAppInfo()
说明:获取应用元数据(名称、目录、环境等)。从 ElectronEgg 构造器写入的 process.env 全局变量读取值。此对象作为 appInfo 参数传递给配置文件函数,支持基于环境的动态配置。
参数:无
返回值:AppInfo — 应用元数据对象
| 属性 | 类型 | 说明 |
|---|---|---|
| name | string | 应用名称 |
| baseDir | string | 项目根目录 |
| electronDir | string | Electron 源码目录 |
| env | string | 运行环境('dev' / 'prod' / 'test') |
| root | string | 日志和运行时数据根目录(通常为 appUserData) |
示例:
import { getAppInfo } from 'ee-core/config';
const appInfo = getAppInfo();
console.log(appInfo.env); // 'dev' 或 'prod'
console.log(appInfo.baseDir); // 项目根路径
console.log(appInfo.root); // 数据目录路径示例 — 在配置文件中使用 appInfo:
// electron/config/config.default.js
const path = require('path');
module.exports = (appInfo) => {
const config = {};
config.logger = {
dir: path.join(appInfo.root, 'logs'),
};
return config;
};Config 类型
Config 接口表示最终合并的运行时配置。集成所有子模块配置,支持动态用户自定义属性。
关键子配置
| 属性 | 类型 | 说明 |
|---|---|---|
| openDevTools | `boolean | OpenDevToolsOptions` |
| singleLock | boolean | 单实例锁 |
| windowsOption | BrowserWindowConstructorOptions | Electron BrowserWindow 选项 |
| logger | LoggerConfig | Pino 日志配置 |
| socketServer | SocketServerConfig | Socket.IO 服务配置 |
| httpServer | HttpServerConfig | HTTP(Koa)服务配置 |
| remote | RemoteConfig | 远程服务配置 |
| mainServer | MainServerConfig | 主窗口内容加载配置 |
| exception | ExceptionConfig | 异常处理配置 |
| jobs | JobsConfig | 后台任务配置 |
| cross | CrossConfig | 跨进程配置 |
配置加载管线
Bundle 模式(生产环境):esbuild 插件扫描 electron/config/ → 生成包含懒加载模块的 globalThis.__EE_CONFIG_REGISTRY__ → ConfigLoader._loadConfig() 按文件名查找条目 → 使用 appInfo 调用配置函数。
Dev 模式(开发环境):ConfigLoader._loadConfig() 使用 loadFile() 从文件系统读取 → 先加载 config.default.js → 再用 config.local.js(开发)或 config.prod.js(生产)覆盖 → 通过 extend() 深度合并。
默认配置值
框架默认值定义在 default_config.ts 中,可被业务配置覆盖:
| 配置键 | 默认值 | 说明 |
|---|---|---|
openDevTools | false | 默认禁用 DevTools |
singleLock | true | 默认启用单实例锁 |
logger.level | 'info' | 最低日志级别 |
logger.rotator | 'day' | 每日日志轮转 |
logger.timezone | 'UTC' | 日志时间戳时区 |
socketServer.enable | false | 默认禁用 Socket.IO |
socketServer.port | 7070 | Socket.IO 默认端口 |
httpServer.enable | false | 默认禁用 HTTP 服务 |
httpServer.port | 7071 | HTTP 默认端口 |
mainServer.protocol | 'file://' | 默认加载本地文件 |
exception.mainExit | false | 主进程异常不退出 |
