From 1b4d604e328bb4c6c5428f5306e52db73686a33a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=89=8B=E7=93=9C=E4=B8=80=E5=8D=81=E9=9B=AA?= Date: Thu, 22 Jan 2026 12:55:34 +0800 Subject: [PATCH] Add support for preloading Node Addons via env var Introduces logic to preload a Node Addon in the worker process if the NAPCAT_PRELOAD_NODE_ADDON_PATH environment variable is set. Logs success or failure of the preload operation for better debugging and flexibility. --- packages/napcat-shell/napcat.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/packages/napcat-shell/napcat.ts b/packages/napcat-shell/napcat.ts index 2b513f1c..78be3a7f 100644 --- a/packages/napcat-shell/napcat.ts +++ b/packages/napcat-shell/napcat.ts @@ -281,6 +281,18 @@ async function startWorkerProcess (): Promise { throw new Error('进程管理器未初始化'); } + // 预加载 Node Addon(如果设置了环境变量) + const preloadAddonPath = process.env['NAPCAT_PRELOAD_NODE_ADDON_PATH']; + if (preloadAddonPath) { + try { + const os = await import('os'); + process.dlopen({ exports: {} }, preloadAddonPath, os.constants.dlopen.RTLD_NOW | os.constants.dlopen.RTLD_GLOBAL); + logger.log(`[NapCat] [Worker] 已预加载 Node Addon: ${preloadAddonPath}`); + } catch (error) { + logger.logError(`[NapCat] [Worker] 预加载 Node Addon 失败: ${preloadAddonPath}`, error); + } + } + // 监听来自父进程的消息 processManager.onParentMessage((msg: unknown) => { if (typeof msg === 'object' && msg !== null && 'type' in msg) {