Decouple daemon native deps from CLI global install #41

Closed
opened 2026-04-22 15:58:12 +00:00 by xingyue · 0 comments
Owner

What

全局安装 nerve-cli 后,better-sqlite3(native C++ addon)在 pnpm global store 里编译。但 pnpm -g rebuild 不支持,导致 Node 版本变更或编译出错时无法修复。

Why

当前依赖链:
nerve-cli (global) → nerve-daemon → better-sqlite3 (native C++ addon)

CLI 直接 import daemon 代码,daemon 的 native 依赖被 bundle/引用到全局。这导致:

  1. pnpm -g rebuild better-sqlite3 报 Unknown option: global
  2. Node 版本升级后 native addon ABI 不兼容,无法修复
  3. nerve start 前台/后台都从 CLI 进程直接加载 daemon,绑死在全局 store

Changes (方案 B)

CLI 变成纯启动器,daemon 运行时从 workspace 加载依赖:

  1. nerve init 时把 @uncaged/nerve-daemon 及其依赖(含 better-sqlite3)装到 ~/.uncaged-nerve/node_modules/
  2. nerve start 时 spawn daemon 进程,NODE_PATH 或直接 require.resolve 指向 workspace 的 node_modules,不从全局 CLI 加载 native module
  3. CLI package.json 移除对 @uncaged/nerve-daemon 的直接依赖,改为运行时动态 import workspace 中的 daemon
  4. nerve init 末尾加 pnpm rebuild better-sqlite3(在 workspace 目录内),确保 native module 编译正确
  5. CLI 的 tsup 配置确认 daemon 不被 bundle 进 CLI dist

同时修复的附带问题

  • nerve start -d spawn daemon 后不检查子进程是否存活就报成功 → 加 1.5s 等待 + isRunning() 校验

Ref

对话讨论 2026-04-22

## What 全局安装 nerve-cli 后,better-sqlite3(native C++ addon)在 pnpm global store 里编译。但 pnpm -g rebuild 不支持,导致 Node 版本变更或编译出错时无法修复。 ## Why 当前依赖链: nerve-cli (global) → nerve-daemon → better-sqlite3 (native C++ addon) CLI 直接 import daemon 代码,daemon 的 native 依赖被 bundle/引用到全局。这导致: 1. pnpm -g rebuild better-sqlite3 报 Unknown option: global 2. Node 版本升级后 native addon ABI 不兼容,无法修复 3. nerve start 前台/后台都从 CLI 进程直接加载 daemon,绑死在全局 store ## Changes (方案 B) CLI 变成纯启动器,daemon 运行时从 workspace 加载依赖: 1. nerve init 时把 @uncaged/nerve-daemon 及其依赖(含 better-sqlite3)装到 ~/.uncaged-nerve/node_modules/ 2. nerve start 时 spawn daemon 进程,NODE_PATH 或直接 require.resolve 指向 workspace 的 node_modules,不从全局 CLI 加载 native module 3. CLI package.json 移除对 @uncaged/nerve-daemon 的直接依赖,改为运行时动态 import workspace 中的 daemon 4. nerve init 末尾加 pnpm rebuild better-sqlite3(在 workspace 目录内),确保 native module 编译正确 5. CLI 的 tsup 配置确认 daemon 不被 bundle 进 CLI dist ### 同时修复的附带问题 - nerve start -d spawn daemon 后不检查子进程是否存活就报成功 → 加 1.5s 等待 + isRunning() 校验 ## Ref 对话讨论 2026-04-22
This repo is archived. You cannot comment on issues.
No Label
1 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: uncaged/nerve#41