# Node 版本兼容恢复、nvm 检测与用户确认流程 当 `addon.node`、随包魔改 `xbs isolated-vm` 或其他 native 产物因为 Node ABI 不兼容无法加载时读取本文件。原则是先让用户确认是否安装 / 切换兼容 Node,再决定是否降级;不得在用户未同意前直接改全局 Node 环境。 ## 兼容版本表 | native 组件 | 兼容 Node.js 版本 | 失败后的默认处理 | |---|---:|---| | `assets/native-addon/-/addon.node` | `v25.8.2` | 先询问是否通过 nvm 安装 / 切换到 `v25.8.2`,用户拒绝后才允许 NativeProtect / JS fallback | | `assets/runtime-frameworks/xbs-isolated-vm/-/isolated_vm.node` | `v26.3.1` | 先询问是否通过 nvm 安装 / 切换到 `v26.3.1`,用户拒绝后才允许改选框架或提供匹配构建产物;不得退回 npm 原版 isolated-vm | ## 触发条件 遇到以下任一情况时启动本流程: - Node 报错包含 `NODE_MODULE_VERSION`、`was compiled against a different Node.js version`、`Module did not self-register`、`The module was compiled against`。 - `scripts/load_native_addon.js --json` 输出 `abiMismatch: true`。 - `scripts/check_xbs_isolated_vm.js --json` 输出 `status: "abi-mismatch"` 或 `abiMismatch: true`。 - 当前 Node 版本不是对应兼容版本,且 native 组件加载失败。 ## 先检测当前 Node 与 nvm ```bash node scripts/check_node_runtime_compat.js --target addon --markdown node scripts/check_node_runtime_compat.js --target isolated-vm --markdown ``` 也可以手动检测: ```bash node -v node -p "process.versions.modules" ``` Windows: ```powershell where.exe nvm nvm version nvm root ``` macOS / Linux: ```bash bash -lc 'command -v nvm || true; [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm --version || true' ``` ## 用户确认模板 ### addon ABI 不兼容 ```markdown 当前 addon.node 与当前 Node ABI 不兼容。addon-first 是补环境硬性基线,因此不应直接降级到 NativeProtect。 兼容 Node.js 版本:v25.8.2。 请选择: 1. 自动检测 / 安装 nvm,并安装切换 Node.js v25.8.2 后重新加载 addon。 2. 我手动安装 nvm;安装完成后回复“nvm 已安装成功”。 3. 我已经安装 nvm,但当前未检测到;我提供 nvm 路径或可用 shell。 4. 不安装兼容 Node,允许本 case 降级到 NativeProtect / JS fallback,并记录差异。 在你确认前,我不会直接降级,也不会修改全局 Node 版本。 ``` ### isolated-vm ABI 不兼容 ```markdown 当前随包魔改 xbs isolated-vm 与当前 Node ABI 不兼容。你已选择 isolated-vm 补环境框架,因此应先尝试兼容 Node,而不是退回 npm 原版 isolated-vm。 兼容 Node.js 版本:v26.3.1。 请选择: 1. 自动检测 / 安装 nvm,并安装切换 Node.js v26.3.1 后重新运行 xbs isolated-vm 自检。 2. 我手动安装 nvm;安装完成后回复“nvm 已安装成功”。 3. 我已经安装 nvm,但当前未检测到;我提供 nvm 路径或可用 shell。 4. 不安装兼容 Node,改为提供当前 Node ABI 匹配的魔改 isolated_vm.node 构建产物,或改选不使用框架 / vm / jsEnv。 在你确认前,我不会改用 npm 原版 isolated-vm,也不会桥接旧 addon.node。 ``` ## nvm 安装与切换 只有用户明确选择自动安装时,才输出安装计划并执行。用户选择手动安装时,只给教程并等待用户确认成功。 Windows 推荐 nvm-windows: ```powershell winget install CoreyButler.NVMforWindows # 或让用户从 nvm-windows 官方 Release 手动安装 nvm version ``` macOS / Linux 常用 nvm-sh: ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash bash -lc 'source "$HOME/.nvm/nvm.sh" && nvm --version' ``` 安装 / 检测 nvm 成功后按目标组件切换: ```bash # addon.node nvm install 25.8.2 nvm use 25.8.2 node -v node -p "process.versions.modules" node scripts/load_native_addon.js --json # xbs isolated-vm nvm install 26.3.1 nvm use 26.3.1 node -v node -p "process.versions.modules" node --no-node-snapshot scripts/check_xbs_isolated_vm.js --strict --json ``` ## 记录要求 无论最终是否切换成功,都写入阶段报告、`case/notes/代码变更记忆.md` 和最终总结: - 触发组件:addon.node / xbs isolated-vm。 - 原 Node 版本、原 ABI、平台、架构。 - 用户选择:自动安装、手动安装、提供 nvm 路径、拒绝安装、提供匹配二进制或改选框架。 - 新 Node 版本、新 ABI 和重新检测结果。 - 如果降级,写明 fallback 范围、已知差异和用户确认记录。