Skip to content

简介

配置模块,负责加载、合并和提供运行时配置。支持两种加载模式:bundle 模式(从 esbuild 预注册的 globalThis.__EE_CONFIG_REGISTRY__ 读取)和 dev 模式(从文件系统加载)。配置文件可导出函数,接收 appInfo 参数以根据环境动态生成配置。

导入

javascript
// ESM
import { loadConfig, getConfig, setConfig, getAppInfo } from 'ee-core/config';
// CJS
const { loadConfig, getConfig, setConfig, getAppInfo } = require('ee-core/config');

注意:loadConfiggetConfigsetConfig 也可从顶层入口(ee-core)导入,但 getAppInfo 仅从子路径(ee-core/config)导出。

javascript
// 顶层入口(不含 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() 获取

示例

javascript
import { loadConfig } from 'ee-core/config';
loadConfig(); // 通常由 ElectronEgg.init() 自动调用

参见ElectronEgg.init()


getConfig()

说明:获取最终合并的运行时配置对象。如果配置尚未加载(如在 loadConfig() 之前调用),会自动触发加载。通常在框架启动后使用,读取配置值。

参数:无

返回值Config — 完整的运行时配置对象,包含所有合并后的设置

示例

javascript
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 输出目录缺少配置文件)。替换之前已加载的任何配置。

参数

参数类型必填说明
cfgConfig要设置为运行时配置的完整配置对象

返回值void

示例

javascript
import { setConfig } from 'ee-core/config';

// 在子进程中,通过 IPC 从主进程接收配置
process.on('message', (msg) => {
  if (msg.type === 'config') {
    setConfig(msg.data);
  }
});

getAppInfo()

说明:获取应用元数据(名称、目录、环境等)。从 ElectronEgg 构造器写入的 process.env 全局变量读取值。此对象作为 appInfo 参数传递给配置文件函数,支持基于环境的动态配置。

参数:无

返回值AppInfo — 应用元数据对象

属性类型说明
namestring应用名称
baseDirstring项目根目录
electronDirstringElectron 源码目录
envstring运行环境('dev' / 'prod' / 'test'
rootstring日志和运行时数据根目录(通常为 appUserData

示例

javascript
import { getAppInfo } from 'ee-core/config';

const appInfo = getAppInfo();
console.log(appInfo.env);       // 'dev' 或 'prod'
console.log(appInfo.baseDir);   // 项目根路径
console.log(appInfo.root);      // 数据目录路径

示例 — 在配置文件中使用 appInfo

javascript
// 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`booleanOpenDevToolsOptions`
singleLockboolean单实例锁
windowsOptionBrowserWindowConstructorOptionsElectron BrowserWindow 选项
loggerLoggerConfigPino 日志配置
socketServerSocketServerConfigSocket.IO 服务配置
httpServerHttpServerConfigHTTP(Koa)服务配置
remoteRemoteConfig远程服务配置
mainServerMainServerConfig主窗口内容加载配置
exceptionExceptionConfig异常处理配置
jobsJobsConfig后台任务配置
crossCrossConfig跨进程配置

配置加载管线

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 中,可被业务配置覆盖:

配置键默认值说明
openDevToolsfalse默认禁用 DevTools
singleLocktrue默认启用单实例锁
logger.level'info'最低日志级别
logger.rotator'day'每日日志轮转
logger.timezone'UTC'日志时间戳时区
socketServer.enablefalse默认禁用 Socket.IO
socketServer.port7070Socket.IO 默认端口
httpServer.enablefalse默认禁用 HTTP 服务
httpServer.port7071HTTP 默认端口
mainServer.protocol'file://'默认加载本地文件
exception.mainExitfalse主进程异常不退出

参见apploggersockettypes