From 05f8e8f3c3c2160a744d665a1662dc4c3e14f766 Mon Sep 17 00:00:00 2001 From: phelogges <31875260+phelogges@users.noreply.github.com> Date: Tue, 4 Nov 2025 17:51:46 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BA=86Unix=E7=BB=88?= =?UTF-8?q?=E7=AB=AF=E6=89=93=E5=BC=80=E5=A4=B1=E8=B4=A5=E7=9A=84bug=20(#1?= =?UTF-8?q?355)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug复现: mlikiowa/napcat-docker:v4.9.23,登陆账号后,在WebUI中打开系统终端失败,查看容器日志报错如下 Failed to create terminal: TypeError: Cannot read properties of undefined (reading 'fork') at new UnixTerminal (file:///app/napcat/napcat.mjs:67721:22) at spawn (file:///app/napcat/napcat.mjs:67873:10) at TerminalManager.createTerminal (file:///app/napcat/napcat.mjs:67963:17) at CreateTerminalHandler (file:///app/napcat/napcat.mjs:68069:36) at Layer.handleRequest (/app/napcat/node_modules/router/lib/layer.js:152:17) at next (/app/napcat/node_modules/router/lib/route.js:157:13) at Route.dispatch (/app/napcat/node_modules/router/lib/route.js:117:3) at handle (/app/napcat/node_modules/router/index.js:435:11) at Layer.handleRequest (/app/napcat/node_modules/router/lib/layer.js:152:17) at /app/napcat/node_modules/router/index.js:295:15 定位到源码https://github.com/NapNeko/NapCatQQ/blob/main/src/pty/prebuild-loader.ts#L5 注意到源码中的pty.node路径与容器中实际不符,修改为正确的路径 验证测试: 笔者没有重新构建,而是保持代码逻辑,反过来将pty.node的路径复制到代码中要求的位置,测试发现bug修复 Extra: 注意到native模块中不止有pty模块,还有ffmpeg等其他模块,笔者没有继续看其他模块的加载情况了,如有必要可能需要确认一并load路径 --- src/pty/prebuild-loader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pty/prebuild-loader.ts b/src/pty/prebuild-loader.ts index 5a5a1ed6..552c7504 100644 --- a/src/pty/prebuild-loader.ts +++ b/src/pty/prebuild-loader.ts @@ -2,7 +2,7 @@ import { require_dlopen } from '.'; export function pty_loader () { let pty: any; try { - pty = require_dlopen('./pty/' + process.platform + '.' + process.arch + '/pty.node'); + pty = require_dlopen('./native/pty/' + process.platform + '.' + process.arch + '/pty.node'); } catch { pty = undefined; }