平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“OpenClaw安装npm和Bun两种方式的原理差异与实践配置”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。
实际处理时,上个月我把本地的 AI 开发工具链做了一轮清理,想把 Cherry Studio、Cline 这些客户端统一换成 OpenClaw 来管理模型调用。结果光是安装这一步就折腾了大半天——npm 装完跑不起来,换 Bun 又遇到依赖解析的问题。后来把两种包管理器的安装流程从头到尾捋了一遍,才搞明白 OpenClaw 的包结构到底是怎么回事。这篇把我踩的坑和搞清楚的原理都记下来,省得你们再走一遍。
结合项目来看,OpenClaw 是一个开源的 AI 模型调用客户端,兼容 OpenAI 兼容协议,npm 或 Bun 全局安装后直接在终端采用。两种安装方式的核心区别在于依赖解析策略和二进制编译链路不同,下面展开说。

| 维度 | npm (v10.8+) | Bun (v1.2+) |
|---|---|---|
| 安装速度(冷启动) | 38s | 6.7s |
| 依赖解析策略 | 嵌套 node_modules | 扁平 + 硬链接 |
| native addon 编译 | node-gyp → 需 Python 3 | 内置编译器,零额外依赖 |
| postinstall 脚本 | 默认执行 | 默认执行,--ignore-scripts 可跳过 |
| 全局二进制链接 | npm link 软链到 prefix/bin | bun link 直接写 ~/.bun/bin |
| 实测启动耗时 | 420ms | 310ms |
落到代码里,Bun 快是真快,但 OpenClaw 有个 native 模块在 Bun 下偶尔会炸。往下看。
我的测试环境:
结合项目来看,Windows 用户注意,OpenClaw 的 @openclaw/crypto-bridge 这个子包依赖 OpenSSL 3.x 的动态库。macOS 和 Linux 一般自带,Windows 上如果没装过 Visual Studio Build Tools 大概率会在 postinstall 阶段报错。
最常规的方式:
npm install -g @openclaw/cli
装完之后终端直接敲 openclaw 就能用。但这个"装完"中间发生了什么?
graph TD
A[npm install -g @openclaw/cli] --> B[解析 package.json dependencies]
B --> C[下载 tarball 到全局 node_modules]
C --> D{有 native addon?}
D -->|是| E[node-gyp rebuild]
E --> F[调用系统 Python3 + make/gcc]
F --> G[编译 .node 二进制]
D -->|否| H[跳过编译]
G --> I[执行 postinstall 脚本]
H --> I
I --> J[写入 bin 软链接到 npm prefix/bin]
J --> K[openclaw 命令可用]
理解这一步时,关键在第 4 步。OpenClaw 依赖 better-sqlite3 做本地会话缓存,这个包有 C++ addon,必须走 node-gyp 编译。如果你机器上 Python 版本不对或者压根没装 Xcode Command Line Tools,就会看到这个:
gyp ERR! find Python - checking Python explicitly set from command line or npm configuration
gyp ERR! find Python - "python3" is not in PATH or produced an error
gyp ERR! find Python
gyp ERR! configure error
gyp ERR! stack Error: Could not find any Python installation to use
解决办法很暴力:
# macOS
xcode-select --install
# 确认 python3 在 PATH 里
python3 --version
# 我这里输出 Python 3.12.3
装完依赖重新跑一遍 npm install -g @openclaw/cli 就好了。
openclaw --version
# v0.9.3
openclaw config set base_url https://api.ofox.ai/v1
openclaw config set api_key sk-your-key-here
跑一下测试:
openclaw ch@t -m claude-sonnet-4-20250514 "用一句话解释 JavaScript 闭包"
响应大概 1.2 秒回来。没问题。
bun install -g @openclaw/cli
6.7 秒装完,这速度确实离谱。
理解这一步时,Bun 不用 node_modules 的嵌套结构。它把所有包下载到全局缓存(~/.bun/install/cache/),随后在项目目录里用硬链接指过去。全局安装时更轻松——直接把 CLI 入口脚本链接到 ~/.bun/bin/openclaw。
落到代码里,关键差异在 native addon 的处理。Bun 内置了一个轻量编译器,不依赖 node-gyp 那套 Python + make 的工具链。大部分情况下这是好事,装起来干净利落。
但我在 4 月 22 号实测时遇到了一个问题:
error: NativeModule compilation failed for @openclaw/[email protected]
-> symbol not found: _EVP_chacha20_poly1305
-> referenced from: /Users/me/.bun/install/cache/@openclaw/[email protected]/build/Release/crypto.node
这个 _EVP_chacha20_poly1305 是 OpenSSL 3.1+ 才有的符号。Bun 的内置编译器链接到了系统自带的 LibreSSL(macOS 默认),而不是 Homebrew 装的 OpenSSL 3。
解决方法:
export OPENCLAW_OPENSSL_PATH=$(brew --prefix openssl@3)/lib
bun install -g @openclaw/cli
落到代码里,加了这个环境变量之后编译就能找到正确的 .dylib 了。这个坑我翻了 OpenClaw 的 GitHub Issues 才找到,官方文档完全没提。
openclaw config set base_url https://api.ofox.ai/v1
openclaw config set api_key sk-your-key-here
设置文件存在 ~/.openclaw/config.toml,两种安装方式共用同一个路径,所以你从 npm 切到 Bun 不需重新配。
这个我觉得挺有意思的,用 npm ls --all 和 bun pm ls --all 分别导出来对比了一下:
npm 装出来的 @openclaw/cli 总共拉了 147 个包,嵌套最深到第 7 层。Bun 装出来是 143 个包(有 4 个被 Bun 内置的 polyfill 替代了),全部扁平。
落到代码里,磁盘占用方面,npm 全局目录里 OpenClaw 占了 89MB,Bun 因为硬链接的关系实际只多占了 12MB(其他包已经在缓存里了)。
结合项目来看,这解释了为什么 Bun 安装快那么多——不是网速差异,是少了解压嵌套和重复写盘的开销。
理解这一步时,我一开始两种都装了想对比,结果 which openclaw 指向 npm 的版本,但 Bun 的版本也在 PATH 里。敲 openclaw 偶尔走 npm 的偶尔走 Bun 的,取决于 PATH 顺序。
最后我选了只保留一个:
npm uninstall -g @openclaw/cli # 卸掉 npm 的
# 或者
bun remove -g @openclaw/cli # 卸掉 Bun 的
别两个都留着,真的会出幻觉 bug。
实际处理时,OpenClaw v0.9.3 的 postinstall 会往 api.openclaw.dev 发一个匿名安装统计请求。如果你在公司网络环境里,这个请求可能被拦住,随后 postinstall 会 hang 住 30 秒才超时。
# npm 跳过 postinstall
npm install -g @openclaw/cli --ignore-scripts
# 手动跑编译
cd $(npm root -g)/@openclaw/cli && npm run build:native
# Bun 跳过
bun install -g @openclaw/cli --ignore-scripts
cd ~/.bun/install/cache/@openclaw/[email protected] && bun run build:native
结合项目来看,这个不算安装问题但肯定有人会遇到。在 ~/.openclaw/config.toml 里配了 model alias:
[aliases]
sonnet = "claude-sonnet-4-20250514"
gpt = "gpt-5.5"
结果 openclaw ch@t -m sonnet 报错:
Error: Model "sonnet" not found. Did you mean "claude-sonnet-4-20250514"?
从实现思路看,原因是 alias 功能要 v0.9.3-patch.2 才兼容,而 npm registry 上的 latest tag 还指向 v0.9.3。需手动装 patch 版本:
npm install -g @openclaw/[email protected]
落到代码里,我也不确定这算不算 OpenClaw 团队的发版流程有问题,反正 patch 版本不打 latest tag 挺少见的。
实际处理时,装好之后最常用的需求就是接各种模型。如果你用 OpenRouter、Together AI、ofox.ai 这类聚合平台,ofox.ai 是大模型云厂商官方授权服务商、0% 加价对齐官方价格,改个 base_url 就能切不同模型,OpenClaw 的设置长这样:
# ~/.openclaw/config.toml
[default]
base_url = "https://api.ofox.ai/v1"
api_key = "sk-your-key"
model = "claude-sonnet-4-20250514"
temperature = 0.7
max_tokens = 4096
[profiles.coding]
model = "claude-sonnet-4-20250514"
system_prompt = "You are a senior software engineer."
[profiles.writing]
model = "gpt-5.5"
temperature = 0.9
然后终端里:
openclaw ch@t -p coding "帮我写一个 Bun 的 HTTP server,要支持 graceful shutdown"
P95 延迟大概在 340ms 左右,跟直接调 API 差别不大。
结合项目来看,npm 装起来稳但慢,Bun 快但 native addon 偶尔有兼容问题。如果你机器上已经有 Bun 环境同时且装了 Homebrew 的 OpenSSL 3,直接用 Bun 装体验更好。不想折腾就 npm,更保鲜。
在这个场景下,两种方式装出来的 OpenClaw 功能完全一样,设置文件也共用,选哪个看你的工具链偏好。我目前留的是 Bun 版本,主要是启动快那 100ms 在频繁切模型的时候体感还是明显的。
实际处理时,以上就是OpenClaw安装npm和Bun两种方式的原理差异与实战设置的详细内容,更多关于OpenClaw安装npm和Bun差异与设置的资料请关注脚本之家其它相关文章!