From 7287da32c1afa24cea9ec8dcd06f5c3be9ac69a1 Mon Sep 17 00:00:00 2001 From: Shiroha7z Date: Tue, 29 Sep 2026 16:53:34 +0800 Subject: [PATCH] fix(cli): resolve BDS path from SFMC root --- .changeset/resolve-bds-path-from-root.md | 5 +++++ packages/cli/src/services.ts | 11 +++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 .changeset/resolve-bds-path-from-root.md diff --git a/.changeset/resolve-bds-path-from-root.md b/.changeset/resolve-bds-path-from-root.md new file mode 100644 index 00000000..1cc2c042 --- /dev/null +++ b/.changeset/resolve-bds-path-from-root.md @@ -0,0 +1,5 @@ +--- +"@sfmc-bds/cli": patch +--- + +将 BDS 启动目录相对 SFMC_ROOT 解析,并在非 Windows 主机上明确拒绝 Windows 绝对路径配置。 diff --git a/packages/cli/src/services.ts b/packages/cli/src/services.ts index 97f2785f..5f4290a2 100644 --- a/packages/cli/src/services.ts +++ b/packages/cli/src/services.ts @@ -447,7 +447,14 @@ function createServices(): Record { string, unknown >) as DBConfig; - const bdsPath = bdsCfg.bds_path ?? ROOT; + const rawBdsPath = String(bdsCfg.bds_path ?? "").trim(); + if (process.platform !== "win32" && /^[A-Za-z]:[\\/]/.test(rawBdsPath)) { + throw new Error( + `configs/bds_updater.json 的 bds_path 是 Windows 路径(${rawBdsPath})。` + + `请改成相对 SFMC_ROOT 的路径,例如 "BDS"。` + ); + } + const bdsPath = path.resolve(ROOT, rawBdsPath || "."); const useLlbotBackend = qqCfg.qq_backend === "llbot"; const qqEnabled = qqCfg.qq_enabled !== false; // 官方 Webhook 由云端接收;仅切换传输方式即可避免本机再启动一个桥。 @@ -463,7 +470,7 @@ function createServices(): Record { const dbPort = dbCfg.db_port ?? 3001; dbHealthPort = dbPort; qqBackendMode = useLlbotBackend ? "llbot" : "official"; - const bdsExe = bdsExePath(path.resolve(bdsPath)); + const bdsExe = bdsExePath(bdsPath); const qqTitle = useLlbotBackend ? "QQ (llbot)" : "QQ (official)"; return {