From d8f21f4e680a4eaacbc8bc016058bd45eaa98a5e Mon Sep 17 00:00:00 2001 From: jkooe <62494645+jkooe@users.noreply.github.com> Date: Sun, 11 Oct 2026 00:30:43 +0800 Subject: [PATCH] =?UTF-8?q?feat(pack):=20=E6=94=AF=E6=8C=81=20--arch?= =?UTF-8?q?=EF=BC=88x64=20/=20arm64=EF=BC=89=E2=80=94=E2=80=94=20ARM=20Win?= =?UTF-8?q?dows=20=E4=B8=8A=20x64=20=E5=8C=85=E4=B8=8D=E5=8F=AF=E7=94=A8?= =?UTF-8?q?=EF=BC=88=E7=9C=9F=E6=9C=BA=E5=AE=9E=E8=AF=81=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 背景(Parallels Win11 ARM 真机验证的结论) x64 包(内含 x64 Node)在 ARM Windows 上:**能启动、能 listen 8765,但 TLS 握手 60s 不完成** (Prism 模拟下协议层异常)→ 协议层完全不可用,且现象具有误导性(端口是通的)。 换同版本 ARM64 Node 后**完全正常**(握手成功、连接、51 项能力)。 ## 改动 `scripts/pack.mjs` 新增 `--arch `(默认 x64,向后兼容): - Node 下载 URL、包目录、产物名全部按架构生成 - 产出:`nodeagent-win-arm64.zip`(ARM Windows 用)/ `nodeagent-win-x64.zip`(默认) - 加了架构校验(非法值直接报错) ## 验证 - `node --check` 语法通过 - 实跑 `node scripts/pack.mjs --arch arm64` → 产出 31.4 MB 包, 内含 ARM64 `node.exe`(85.6 MB 解压后)+ `agent.mjs` --- scripts/pack.mjs | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/scripts/pack.mjs b/scripts/pack.mjs index 0ef7da1..73732c6 100644 --- a/scripts/pack.mjs +++ b/scripts/pack.mjs @@ -4,7 +4,7 @@ * * 用法: node scripts/pack.mjs [--node v22.20.0] [--out release] * - * 产物: /nodeagent-win-x64.zip + * 产物: /nodeagent-win-.zip(arch 默认 x64,见 --arch) * ├── node.exe Node.js 运行时(免装 Node.js) * ├── agent.mjs esbuild 打包的被控端(含全部依赖) * ├── install.cmd 一键安装(双击即用,自提权 + 自动生成 PSK) @@ -36,10 +36,14 @@ const getArg = (k, d) => { }; const NODE_VERSION = getArg('--node', 'v22.20.0'); +// 2026-10-11:Windows 也分架构。x64 包在 **ARM Windows(含 Parallels 的 Win11 ARM)** 上 +// 能启动、能 listen,但 **TLS 握手不完成**(Prism 模拟下协议层异常)→ 必须按架构出包。 +// 用法:node scripts/pack.mjs --arch arm64 → nodeagent-win-arm64.zip +const NODE_ARCH = getArg('--arch', 'x64'); const OUT_DIR = getArg('--out', join(root, 'release')); -const PKG_DIR = join(OUT_DIR, 'nodeagent-win-x64'); +const PKG_DIR = join(OUT_DIR, `nodeagent-win-${NODE_ARCH}`); const MIRROR = process.env.NODEAGENT_NODE_MIRROR ?? 'https://npmmirror.com/mirrors/node'; -const NODE_ZIP_URL = `${MIRROR}/${NODE_VERSION}/node-${NODE_VERSION}-win-x64.zip`; +const NODE_ZIP_URL = `${MIRROR}/${NODE_VERSION}/node-${NODE_VERSION}-win-${NODE_ARCH}.zip`; const log = (msg) => console.log(msg); const fail = (msg) => { @@ -219,7 +223,7 @@ async function main() { log(entries.join('\n')); log('\n=== ⑤ 打 zip ==='); - const zipOut = join(OUT_DIR, 'nodeagent-win-x64.zip'); + const zipOut = join(OUT_DIR, `nodeagent-win-${NODE_ARCH}.zip`); rmSync(zipOut, { force: true }); // ⚠️ 必须排除 PSK.txt:本 zip 会作为**公开的 GitHub Release 资产**发布, // 把预共享密钥打进包里等于公开密钥。install.cmd 在文件缺失时会自动生成新密钥