欢迎光临
我们一直在努力

OpenClaw 的 278 个版本台账:engines 在 9 月 3 日悄悄换掉了 Node 22,而 6 条 LTS 线至今没跟

OpenClaw 的 278 个版本台账:engines 在 9 月 3 日悄悄换掉了 Node 22,而 6 条 LTS 线至今没跟

数据采集时间:2026-10-16 15:00(Asia/Shanghai)。本文全部数据来自 npm registry 官方元数据接口 GET https://registry.npmjs.org/openclaw(响应体 19,886,890 字节,time.modified = 2026-10-15T23:58:29.036Z)以及 npmjs.com、nodejs.org 官方页面实拍。凡标注 UNKNOWN 的条目,本文不做推测性补全。

如果你只用 npm install -g openclaw@latest,你大概率永远看不到下面这件事:从 2026 年 9 月 8 日发布的 2026.9.3 开始,OpenClaw 的 engines.node 字段被整体换掉,旧 Node 22 用户在不改运行时的情况下已经装不上主线版本了。而官方 LTS 线(6.33 / 7.35 / 8.35)至今仍停留在旧的 Node 22 契约上,两套互不兼容的安装契约并行存在了 38 天。

这两个判断都可以在 registry.npmjs.org/openclaw 的公开元数据里逐字段复核:打开该地址,搜索 2026.9.3 的 engines 字段,再和 2026.8.35 对比,差异一眼可见。

这不是一次”升级建议”,是一次运行时地板被人抽走的事件。我们把 npm 上这个包 278 个版本的元数据全量解析了一遍,试图回答一个很具体的问题:到底有多少人在升级时会撞墙,以及撞的是哪面墙。

一、278 个版本:被 dist-tags 藏起来的真实规模

npmjs.com openclaw 包版本页实拍:三条 dist-tag 与版本历史列表,2026-10-16

npm 页面顶部只给你看三个标签:latest、extended-stable、beta。但 registry 里的完整版本列表是这样的:

维度 数值 口径
发布版本总数 278 registry versions 字段全量
稳定线(stable) 118 不含 beta / alpha / rc / next
预发布线(prerelease) 160 占比 57.6%
首个版本 0.0.1 2026-01-29T11:08:11Z
废弃(deprecated)版本 1 仅 2026.5.19-alpha.1
当前 dist-tags 3 latest / extended-stable / beta

预发布版本数量是稳定版的 1.36 倍(160 : 118),这个比例本身就是一条信息:这个项目的发布管道主要由预发布驱动,稳定版是从预发布里”晋升”出来的,而不是独立开发的。三条 dist-tag 的当前指向:

dist-tag 版本 engines.node 直接依赖数
latest 2026.10.4 `>=24.16.0 <25 \ \ >=26.1.0` 65
extended-stable 2026.9.33 `>=24.16.0 <25 \ \ >=26.1.0` 66
beta 2026.10.10-beta.1 `>=24.16.0 <25 \ \ >=26.1.0` 68

三条线当前用的是同一套 Node 契约——但这只是今天的快照,十天前的 9 月 10 日还不是这样。

二、核心发现:engines 地板在 2026-09-08 被整体抬升

按发布时间排序,稳定线的 engines.node 全文只有 8 种取值。关键的一次跳变发生在 2026-09-08:

发布时间 版本 engines.node
2026-01-30 2026.1.29 >=22.12.0
2026-03-13 2026.3.12 >=22.16.0
2026-03-25 2026.3.24 >=22.14.0 ← 地板反而降了
2026-05-14 2026.5.12 >=22.16.0
2026-05-18 2026.5.18 >=22.19.0
2026-07-13 2026.7.1 `>=22.22.3 <23 \ \ >=24.15.0 <25 \ \ >=25.9.0` ← 首次双区间
2026-08-31 2026.8.1 同上
2026-09-08 2026.9.3 **`>=24.16.0 <25 \ \ >=26.1.0`** ← 删除了整个 Node 22 区间

逐条比对后的三个事实:

  1. Node 22 从允许区间里被彻底删除,不是收紧下限,是整条 22.x 支线不再出现在任何 OR 分支中。
  2. 最小可安装版本从 22.22.3 直接跳到 24.16.0,中间空档(23.11.0 及以下)无人值守。
  3. 这是一次静默变更:registry 元数据里没有任何 changelog 字段说明这次契约变更,npm outdated 和 npm view 的默认输出都不会提示你 Node 版本已经不兼容。

注意时间线的第一行:2026-03-24 那个版本把地板从 >=22.16.0 降回 >=22.14.0。也就是说这套 engines 契约在历史上并非单调递增的——它会在两个 LTS 线的构建之间反复横跳。只看稳定版序号(3.12 → 3.24)会以为地板在稳步上升,按发布时间看才知道它来回摆动。这一点对读者的实际意义是:你在读版本号时看到的”要求 Node 22.16″可能来自一个月前的另一个补丁线。

三、两套契约并行的 38 天:LTS 线没有跟

Node.js 官方 Releases 页实拍:v22 为 LTS、v24 为 Maintenance、v26 为 Current,2026-10-16

这是本文最值得单独拿出来讲的一条。截至 2026-10-16,有 12 个稳定版本要求 >=24.16.0,全部集中在主线:

2026.9.3 / 2026.9.4 / 2026.9.5 / 2026.9.6 / 2026.9.7 / 2026.9.8 / 2026.9.9 / 2026.10.1 / 2026.10.2 / 2026.10.3 / 2026.9.33 / 2026.10.4

而官方 LTS(extended-stable 历史)补丁线的情况是:

LTS 版本 发布时间 engines.node 依赖数
2026.6.33 2026-07-21 >=22.19.0 54
2026.6.34 2026-08-04 >=22.19.0 54
2026.6.35 2026-09-10 >=22.19.0 54
2026.7.33 2026-09-18 `>=22.22.3 <23 \ \ >=24.15.0 <25 \ \ >=25.9.0` 56
2026.7.34 2026-09-20 同上 56
2026.7.35 2026-09-21 同上 56
2026.8.33 2026-09-28 同上 66
2026.8.34 2026-10-01 同上 66
2026.8.35 2026-10-02 同上 66
2026.9.33 2026-10-15 `>=24.16.0 <25 \ \ >=26.1.0` 66

六条 LTS 线里有五条(6.33/6.34/6.35/7.33/7.34/7.35/8.33/8.34/8.35 中的全部旧代)仍接受 Node 22,只有最新补发的 9.33 跟上了主线。实际后果是:

  • 你跑在 Node 22.20 上,npm i -g openclaw@latest 会被拒(22.x 不在区间内)。
  • 但 npm i -g openclaw@2026.8.35 能装。
  • 也就是说,同一个包在同一天可以既是”不可安装”又是”可安装”,取决你钉哪个版本号。这就是为什么”要不要升级”这个问题在 OpenClaw 上没有一个统一答案——它取决于你的 Node 版本和你选择哪条线。

Node.js 官方发布页(nodejs.org/en/about/previous-releases,本文实拍)独立印证了这件事的时间窗:v22 当前状态为 LTS,v24 为 Maintenance,v26 为 Current,且官方明确 LTS 阶段最长 12 个月后进入 EOL。换句话说,你停留在 Node 22 上的每一天,都在消耗这条线的剩余维护期,而 OpenClaw 主线已经不再为这条线提供最新功能。

四、依赖治理:从 53 个浮动范围到 100% 精确锁定

engines 是安装期的硬门槛(行为规则见 npm 官方 package.json 规范 的 engines 字段,以及 npm-install 文档),依赖版本策略则是复现能力的核心。全量统计稳定线的依赖声明(共 6,382 条):

版本区间 使用 ^ 浮动范围 使用 ~ 精确锁定 其他
至 2026.5.10-beta.5 2,724 0 其余 2
2026.5.12-beta.1 之后(122 个版本) 0 0 全部 0

最后一个还含浮动范围的版本是 2026.5.10-beta.5(2026-05-11T16:38:11Z),它的 62 个依赖里有 39 个带 ^。从它的下一个版本 2026.5.12-beta.1 起,到当前的 2026.10.4 为止,连续 122 个发布版本的 dependencies 里没有出现过任何一个 ^ 或 ~,全部是精确版本号。以当前的 2026.10.4 为例,65 个依赖长这样:


ws 8.21.3    npm 12.1.0   tar 7.5.22    zod 4.6.5    diff 9.0.0
jiti 2.7.0   yaml 2.9.1   acorn 8.18.0  chalk 6.0.0  execa 10.0.1

这是一个非常激进但非常正确的供应链决策:对一个要跑在生产 Gateway 上、且会被反复自动升级的 Agent 运行时来说,浮动范围意味着”同一份 package.json 在不同日期装出不同产物”。精确锁定消除了这类不确定性。代价是升级压力全部转移给了维护者——每次依赖更新都要重发一个版本号,这也解释了为什么 278 个版本里 57.6% 是预发布。

配套的还有两个可验证的加固措施:

  • bundleDependencies 打包了 3 个关键依赖:@openclaw/proxyline、chrome-devtools-mcp、undici。这三个被打进 tarball 而不走网络解析——对一个要直接驱动浏览器和本地 HTTP 的运行时来说,这是把”供应链中间人”从安装路径上移除了。
  • dist.attestations 与 dist.signatures 均为真,且带 sha512 完整性哈希(2026.10.4 的 integrity 以 sha512-+FH0StZF1tlTazM7JJGY6JePeJmhFNSRB 开头)。构建产物可溯源。

代价写在元数据里:2026.10.4 解包后 13,985 个文件、245.9 MB。精确锁定 + 内联打包换来的是可复现,付出的是安装体积。

五、一次真正的依赖重构:9 月 3 日换掉了 7 进 7 出

engines 变更不是孤立事件。对比 2026.9.3 与 2026.10.4 的依赖集合:

方向 包
移除(7) @grammyjs/runner、chokidar、ms、pretty-ms、quickjs-wasi、tree-sitter-bash、typescript
新增(7) @babel/generator、@babel/parser、@babel/traverse、chrome-devtools-mcp、esbuild、import-meta-resolve、npm

这个组合很能说明问题。移出侧里,typescript 和 tree-sitter-bash 属于构建期/解析期工具,chokidar 是文件监听,@grammyjs/runner 是 Telegram 框架的核心。新增侧里,@babel/* 三件套 + import-meta-resolve 是模块解析与转译,esbuild 是原生编译器,npm 本身被纳入依赖(配合前面提到的 3 个 bundleDependencies)。

chokidar 和 @grammyjs/runner 的移除尤其值得注意:前者是 Node 生态里最广泛使用的文件监听实现,被移除通常意味着换成了 Node 原生的 fs.watch 或自研轮询;后者意味着 Telegram 通道不再走 grammY 框架。这两条都是运行时行为层面的替换,不只是依赖增删。至于替换后 Telegram 通道的实际行为是否等价、文件监听的边界情况是否有回归——registry 元数据不包含这些信息,本文不做推测,标记为 UNKNOWN,需要读对应版本的 CHANGELOG 原文才能确认。

六、发布节奏:4 月和 5 月是两条异常曲线

按月统计 278 个版本的发布时间:

月份 发布数 月份 发布数
2026-01 9 2026-06 26
2026-02 32 2026-07 14
2026-03 26 2026-08 8
2026-04 62 2026-09 13
2026-05 72 2026-10 16(截至 10-16)

4 月和 5 月两个月合计 134 个版本,占全部版本的 48.2%。更极端的是单日密度:141 个有发布的自然日里,71 天发布超过 1 个版本,最高的一天是 2026-04-26,一天 10 个版本;2026-01-30 和 2026-04-24、2026-04-25 各 7 个。

这与”预发布占 57.6%”是一致的:4-5 月大概率是一次密集的 beta 迭代潮,而日均 0.5 个版本在 7 月后回落到日均 0.6 个以下。官方没有解释这个节奏变化的原因,标记为 UNKNOWN。对使用者的实际含义只有一个:如果你在这两个月里用 @latest 跟版本,你几乎每天都会被推到不同的包上——而现在 latest 的 dist-tag 指向已发布的稳定版,但历史上它一度指向过预发布版本,锁定版本号是更安全的做法。

七、给你的可执行判断

npm 官方 npm-install 文档页实拍:安装期版本约束与 engines 校验行为,2026-10-16

基于上面 4,380 字的全量元数据解析,下面是可以直接落地的几条:

  1. 先查你的 Node 版本,再决定要不要升 OpenClaw。 命令:node -v。低于 24.16.0 且不想动运行时,就别升主线,钉 LTS 版本(本文数据中 2026.8.35 仍接受 Node 22)。
  2. 升级前固定版本号,npm i -g openclaw@2026.10.4 而不是 @latest。理由不是本文的猜测,而是 4-5 月日均 3.7 个版本的实测发布密度。
  3. 认准 engines 而不是版本号。三套 LTS 线的依赖数各不相同(54 / 56 / 66),它们不是同一个包的”减配版”,而是不同时间点的独立构建。
  4. 如果你的 CI 用 Node 22,那么 LTS 线(6.35 / 8.35)是你当前唯一不需要改构建镜像的选择。

八、本文的证据口径与未知项

官方明示(可直接核验):版本总数 278、dist-tags 三条当前指向、各版本 engines.node 与 dependencies、bundleDependencies、integrity / signatures / attestations、unpackedSize 245.9 MB / fileCount 13,985、发布时间戳。以上全部来自本文开头列出的 registry 接口响应体,可自行复现。

本文的统计与换算(非官方表述):稳定线 118 / 预发布 160 的划分(按版本号是否含 beta|alpha|rc|next);6,382 条依赖声明中 2,724 条 ^ 的归类;122 个”连续无浮动范围”版本的计数;38 天并行的推算(2026-09-08 至 2026-10-16);”48.2% 集中在 4-5 月”的占比;依赖集合的 7 进 7 出对比。这些是本文按明示数据做的加工,方法已在正文写明。

UNKNOWN(本文不做推测):① chokidar / @grammyjs/runner 等 7 个移除项的替代实现与行为是否等价;② 2026-05-11 取消浮动范围是否有官方 changelog 依据;③ 4-5 月发布密度骤增的动因;④ 各 LTS 线之间的功能差异(registry 不含 changelog);⑤ 9 月 8 日 engines 变更是否经过公告,registry 无任何说明字段;⑥ optionalDependencies 中 79 个平台相关包在具体平台上的实际生效情况。

未做的事:本文未安装 openclaw、未执行任何安装命令、未登录任何控制台、未调用需要认证的接口。所有数字来自匿名可访问的公开 registry 元数据。

九、来源与可核验链接

来源 用途 采集时间
npm registry · openclaw 完整元数据 278 个版本的 engines / dependencies / dist / time 全量解析 2026-10-16
npmjs.com · openclaw 版本页 版本列表与周下载量实拍对照 2026-10-16
Node.js Releases 官方页 v22 LTS / v24 Maintenance / v26 Current 状态实拍 2026-10-16
npm · package.json 规范 engines 字段语义与生效规则 2026-10-16
npm · npm-install 文档 安装期版本约束的报错行为 2026-10-16
GitHub · openclaw/openclaw 仓库与 CHANGELOG 原文(用于核验 UNKNOWN 项) 2026-10-16

本文所有版本号、依赖名、时间戳均可在上述第一个链接中逐条复核。若某项与你的实测不符,以 registry 实时返回为准——本文的数据快照是 2026-10-16 15:00。

赞(0)
未经允许不得转载:时间网 » OpenClaw 的 278 个版本台账:engines 在 9 月 3 日悄悄换掉了 Node 22,而 6 条 LTS 线至今没跟

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

登录

找回密码

注册