From d4a93e9bdc470bd3da48e93118b5418038a5d4d6 Mon Sep 17 00:00:00 2001 From: duorameng <2997944583@qq.com> Date: Wed, 29 Apr 2026 21:06:10 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9Abinary=20run=20node=20module?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/controllers/terminal_controller.go | 19 +++++++++++++++++++ internal/utils/fs.go | 8 ++++++++ 2 files changed, 27 insertions(+) diff --git a/internal/controllers/terminal_controller.go b/internal/controllers/terminal_controller.go index 1ad7e19..5687fd5 100644 --- a/internal/controllers/terminal_controller.go +++ b/internal/controllers/terminal_controller.go @@ -9,6 +9,7 @@ import ( "runtime" "sync" "time" + "strings" "unicode/utf8" "github.com/engigu/baihu-panel/internal/constant" @@ -379,6 +380,24 @@ func (tc *TerminalController) buildTerminalEnv(userID string, extraEnvs ...strin env = append(env, envVars...) } + // 为 Docker 环境或二进制版本注入所有 mise 已安装 Node 的全局依赖路径到 NODE_PATH (Issue-90) + if !utils.IsInDocker() || (!strings.Contains(os.Args[0], "go-build") && !strings.Contains(os.Args[0], "tmp")) { + versions, _ := utils.ListMiseInstalledVersions("node") + var nodePaths []string + for _, v := range versions { + if p := utils.GetMiseNodePath(v); p != "" { + nodePaths = append(nodePaths, p) + } + } + if len(nodePaths) > 0 { + sep := ":" + if runtime.GOOS == "windows" { + sep = ";" + } + env = append(env, "NODE_PATH="+strings.Join(nodePaths, sep)) + } + } + return env } diff --git a/internal/utils/fs.go b/internal/utils/fs.go index 87012f6..99ce13b 100644 --- a/internal/utils/fs.go +++ b/internal/utils/fs.go @@ -75,3 +75,11 @@ func copyDir(src, dest string) error { return nil } + +// IsInDocker 判断程序是否运行在 Docker 容器中 +func IsInDocker() bool { + if _, err := os.Stat("/.dockerenv"); err == nil { + return true + } + return false +}