从 npm install 到跑通 OpenClaw:本地部署的依赖管理全记录

为什么 OpenClaw 值得 Node.js 开发者关注

说实话,当我第一次看到 OpenClaw 的 package.json,就知道这个项目的工程化水平不一般。一个完整的 AI Agent 框架,底层跑在 Node.js 上,用 npm 生态串起了从安装到运行的全链路——这对我们前端工程师来说太友好了。

本文把部署 OpenClaw 的过程拆解成一个个依赖管理和工程化的步骤,帮你在本地稳稳跑通。

第一步:Node.js 环境——版本管理是基本功

OpenClaw 要求 Node.js >= 22。如果你还在手动从官网下 .pkg 安装,是时候切到 nvm 了。nvm 管理多版本 Node.js 就像 package.json 管理依赖一样优雅。

# 安装 nvm(如果还没装过)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
source ~/.zshrc  # 或 source ~/.bashrc

# 拉取 Node.js 22 并设为默认
nvm install 22
nvm alias default 22

确认一下版本:

node -v   # v22.x.x
npm -v    # 11.x.x

插一句:如果你团队统一用 pnpm,后续 npm install -g openclaw 可以换成 pnpm add -g openclaw,效果一样,还能享受 pnpm 的硬链接去重。yarn 的全局安装命令是 yarn global add openclaw

第二步:安装 OpenClaw——两种包管理策略

策略一:全局安装(快速上手)

npm install -g openclaw

全局包的 bin 会被 link 到 $(npm bin -g) 目录。如果你发现终端找不到 openclaw 命令,八成是这个路径没在 $PATH 里。解决办法:

# 查看全局 bin 路径
npm bin -g

# 追加到 shell 配置
echo 'export PATH="$(npm bin -g):$PATH"' >> ~/.zshrc
source ~/.zshrc

策略二:从源码构建(适合想看内部依赖树的人)

git clone https://github.com/openclaw/openclaw.git
cd openclaw

# 看看依赖树长什么样
npm ls --depth=0

# 安装依赖并构建
npm install
npm run build
npm link   # 把本地构建产物 link 到全局

npm link 是个被低估的命令。它在全局 node_modules 里创建一个符号链接指向你的本地项目,这样你既能用 openclaw 全局命令,又能随时改源码、rebuild。

验证安装:openclaw --version

第三步:初始化——onboard 的背后发生了什么

openclaw onboard --install-daemon

这条命令做了几件事:

  1. 创建 ~/.openclaw/ 配置目录
  2. 生成 openclaw.json 核心配置文件
  3. 在 Mac 上注册 LaunchAgent(~/Library/LaunchAgents/ai.openclaw.gateway.plist),Windows 上则是 systemd 服务
  4. 启动交互式配置向导

向导里的关键选项:

  • Security: Yes
  • Onboarding mode: Manual(推荐,控制力更强)
  • Setup: Local gateway
  • Model provider: 按你手头的 API Key 选

第四步:模型配置——JSON 就是你的 .env

编辑 ~/.openclaw/openclaw.json。以通义千问为例:

{
  "gateway": {
    "mode": "local",
    "port": 18789,
    "auth": { "token": "${OPENCLAW_GATEWAY_TOKEN}" }
  },
  "models": {
    "mode": "merge",
    "providers": {
      "dashscope": {
        "baseUrl": "https://dashscope.aliyuncs.com/compatible-mode/v1",
        "apiKey": "sk-你的API_KEY",
        "api": "openai-completions",
        "models": [
          { "id": "qwen-turbo", "name": "Qwen Turbo" },
          { "id": "qwen-max-latest", "name": "Qwen Max Latest" }
        ]
      }
    }
  },
  "agents": {
    "defaults": {
      "model": { "primary": "dashscope/qwen-turbo" },
      "workspace": "~/.openclaw/workspace"
    }
  }
}

重点提醒apiKey 要直接写死在 JSON 里,不要用 ${ENV_VAR} 语法。原因很简单——Mac 的 LaunchAgent 启动的进程,拿不到你在 Terminal session 里 export 的环境变量。这跟 Node.js 里 process.env 能读到 .env 文件是两码事,LaunchAgent 的运行环境完全独立。

所有兼容 OpenAI Chat Completions 协议的模型都能接入:DeepSeek、智谱 GLM 等,改 baseUrlapiKey 就行。

第五步:飞书插件——npm 生态的渠道扩展

npm install -g @openclaw/feishu
openclaw configure

选择 Channels → Feishu/Lark,填入飞书应用的 App ID 和 App Secret。

飞书开放平台侧需要:

  • 开启机器人能力
  • 事件订阅选长连接模式
  • 权限:im:messageim:chatcontact:user.base:readonly

注意:OpenClaw 新版内置了飞书插件,再全局装 @openclaw/feishu 会触发 duplicate plugin id detected 警告。遇到这个直接 npm uninstall -g @openclaw/feishu 就好,不影响功能。

第六步:启动网关

openclaw gateway --port 18789

控制台输出 listening on ws://127.0.0.1:18789 就算成功。openclaw dashboard 打开 Web UI。

常见问题排查

端口冲突

网关没正常退出时,重启会报 gateway already running

lsof -i :18789            # 找出占用进程
kill -9 <PID>             # 终止
rm -f /tmp/openclaw/gateway.lock  # 清锁文件
openclaw gateway --port 18789     # 重启

模型切换后缓存残留

openclaw sessions cleanup
rm -f ~/.openclaw/agents/main/agent/auth-profiles.json
openclaw gateway stop && openclaw gateway --port 18789

配置文件 schema 升级

OpenClaw 版本迭代后 JSON 结构可能变化。常见的是 models 必须用 models.providers 嵌套,agents 要用 agents.list 数组。跑不通时先对照官方文档或本文示例核对结构。

LaunchAgent 管理

launchctl list | grep openclaw                                    # 查状态
launchctl bootout gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist   # 停
launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.gateway.plist # 启

小结

OpenClaw 的工程化做得相当扎实:npm 全局安装一步到位,npm link 支持本地开发,LaunchAgent 做守护进程,JSON 配置文件结构清晰。对于熟悉 Node.js 生态的开发者来说,这套部署流程几乎零学习成本。

真正需要花精力的,是后续的 skills 配置和 agents 编排——但那就是另一篇的内容了。

这个之前不知道

底层设计比我想的要讲究

不错不错

等你下一篇

为什么我的装完之后什么反应都没有

npm全局安装是反模式 应该用npx或者项目级依赖

装完了然后呢 除了聊天还能干啥实际的

需要一个真正的一键安装方案 不是伪一键

备份策略呢 数据目录记得定时snapshot

实验室的服务器能装吗 怕导师看到不高兴

部署在自己的NAS上 随时随地SSH进去用

pnpm workspace比npm workspaces好用多了 但学习曲线也更陡

又一篇前端视角的文章 OpenClaw的核心用户真的是前端吗

防止agent跑飞了停不下来