4.7 KiB
4.7 KiB
Node 版本兼容恢复、nvm 检测与用户确认流程
当 addon.node、随包魔改 xbs isolated-vm 或其他 native 产物因为 Node ABI 不兼容无法加载时读取本文件。原则是先让用户确认是否安装 / 切换兼容 Node,再决定是否降级;不得在用户未同意前直接改全局 Node 环境。
兼容版本表
| native 组件 | 兼容 Node.js 版本 | 失败后的默认处理 |
|---|---|---|
assets/native-addon/<platform>-<arch>/addon.node |
v25.8.2 |
先询问是否通过 nvm 安装 / 切换到 v25.8.2,用户拒绝后才允许 NativeProtect / JS fallback |
assets/runtime-frameworks/xbs-isolated-vm/<platform>-<arch>/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
node scripts/check_node_runtime_compat.js --target addon --markdown
node scripts/check_node_runtime_compat.js --target isolated-vm --markdown
也可以手动检测:
node -v
node -p "process.versions.modules"
Windows:
where.exe nvm
nvm version
nvm root
macOS / Linux:
bash -lc 'command -v nvm || true; [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" && nvm --version || true'
用户确认模板
addon ABI 不兼容
当前 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 不兼容
当前随包魔改 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:
winget install CoreyButler.NVMforWindows
# 或让用户从 nvm-windows 官方 Release 手动安装
nvm version
macOS / Linux 常用 nvm-sh:
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash
bash -lc 'source "$HOME/.nvm/nvm.sh" && nvm --version'
安装 / 检测 nvm 成功后按目标组件切换:
# 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 范围、已知差异和用户确认记录。