1. 这个报错到底卡在哪:openclaw onboard --install-daemon 与 tslib.js 的关系
openclaw onboard --install-daemon是 OpenClaw 初始化守护进程的入口命令,它会把 CLI 本体、后台 daemon 以及一批运行时依赖一次性装好。你敲下这条命令后看到Error: Cannot find module './internal/tslib.js',说明 Node 在加载某个包时,按相对路径去找internal/tslib.js这个文件,结果没找到。注意关键词是「相对路径」——./internal/tslib.js不是从 node_modules 根目录找,而是从报错那个包自己的目录里找。
这个报错最常出现在@anthropic-ai相关依赖的深层嵌套结构里。tslib 本来是 TypeScript 编译后代码的运行时辅助库,正常安装时它会被放在包的internal/子目录下。一旦 npm 在安装这个深层依赖时网络中断、缓存写坏,或者包本身发布时打包不完整,这个文件就会缺失,于是 require 直接抛错。
它和 TaoToken 的关系在于:TaoToken 提供统一的 Key 与 API 通道,OpenClaw 通过它去调用模型能力。但依赖安装这一层和 API 通道是两回事——报错发生在本地文件系统,不是网络鉴权。很多人一看到报错就以为是 Key 配错了,其实方向反了。这篇就按「依赖完整性 → Node 版本 → 安装路径」三个角度,把这条命令从报错到 daemon 正常启动走一遍。适合已经在用 OpenClaw、并且把模型请求接到 TaoToken 通道上的开发者。
2. 先把 TaoToken 通道准备好:Key 与接入信息
在动依赖之前,先把上层通道确认好,避免修完依赖又卡在鉴权上。TaoToken 的定位是统一 Key/API 通道,你只需要一个 Key,就能在 OpenClaw 这类工具里对接模型能力,不用为每个模型单独维护一套凭证。
你需要拿到两样东西:一个是 API Key,一个是接入地址。Key 在控制台的 API Keys 页面创建,地址用https://taotoken.net/api(这个地址不加任何查询参数)。创建 Key 的入口在这里:
控制台 API Keys:https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_tslib
拿到 Key 之后,先别急着写进 OpenClaw 配置,用一条最简请求验证通道本身是通的。这一步能把「通道问题」和「依赖问题」彻底分开——如果这条命令都失败,那后面修 tslib 也没意义。
curl -sS https://taotoken.net/api/v1/models \ -H "Authorization: Bearer $TAOTOKEN_API_KEY" \ -H "Content-Type: application/json"返回里能看到模型列表,就说明 Key 和通道都正常。把 Key 存成环境变量,后面 OpenClaw 直接读它,避免明文写进配置文件:
# Linux / macOS export TAOTOKEN_API_KEY="sk-你的key" # Windows PowerShell $env:TAOTOKEN_API_KEY = "sk-你的key"如果你更想先在网页里确认模型能不能正常对话,可以直接用模型对话页试一句,比命令行更直观:
模型对话:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_tslib
通道确认没问题,再回到openclaw onboard --install-daemon的依赖修复上。
3. 可复制配置:三步定位 tslib.js 缺失
3.1 第一步:确认报错包与文件是否真的缺失
先别急着重装,先定位到底是哪个包缺文件。用 Node 直接打印模块解析路径,比盲猜快得多:
# 找到 openclaw 全局安装位置 npm root -g # 进入全局 node_modules,搜索 tslib.js 的实际分布 find "$(npm root -g)" -name "tslib.js" -path "*internal*" 2>/dev/nullWindows PowerShell 用这条:
npm root -g Get-ChildItem -Path (npm root -g) -Recurse -Filter "tslib.js" -ErrorAction SilentlyContinue | Where-Object { $_.FullName -like "*internal*" }如果输出为空,说明internal/tslib.js确实没被装下来,属于文件缺失;如果输出里有路径但报错依旧,那多半是 Node 版本或路径解析的问题,往下看 3.2 和 3.3。
3.2 第二步:核对 Node 版本与包要求
./internal/tslib.js这种相对路径解析,对 Node 版本和包导出规则比较敏感。先看当前版本:
node -v npm -vOpenClaw 这类工具通常要求 Node 18 以上,部分新版本依赖需要 Node 20 LTS。如果你的版本偏低,用 nvm 切一个稳定版再重装,比在旧版本上反复折腾省事:
# 安装并使用 Node 20 LTS nvm install 20 nvm use 20 node -v版本对齐后,再执行一次依赖重装。这里建议先清缓存,避免又下到坏文件:
npm cache clean --force npm install -g openclaw@latest --verbose--verbose会打印每个依赖的下载与解压过程,如果 tslib 相关文件在安装阶段就报错,日志里能直接看到是哪个包、哪一步断的。
3.3 第三步:检查安装路径与残留文件
如果版本没问题、缓存也清了还是报错,那就是安装路径里有残留的损坏文件。npm 的uninstall有时删不干净,尤其是全局目录下的旧包。手动清一遍最有效。
Windows 下全局 npm 目录通常在%AppData%\npm,进去删掉这几样(如果存在):
%AppData%\npm\node_modules %AppData%\npm\openclaw %AppData%\npm\openclaw.cmdLinux / macOS 对应的是$(npm root -g)和$(npm bin -g)下的 openclaw 可执行文件。删之前把里面其他重要的全局包记一下,回头一起重装。
清理完再重装,并强制走 HTTPS 拉取,避免 SSH 方式在部分网络下中断导致文件不完整:
git config --global url."https://github.com/".insteadOf "ssh://git@github.com/" npm install -g openclaw@latest --verbose如果最新版依然报同样的错,说明这个版本在打包上可能有问题,降一个稳定版试试:
npm view openclaw versions --json # 先看历史版本 npm install -g openclaw@上一个稳定版本号 --verbose4. 验证请求:daemon 是否真的起来了
依赖修好后,重新跑初始化命令,并加上--verbose看详细过程:
openclaw onboard --install-daemon --verboseWindows 上如果遇到执行策略拦截,用这条绕过:
powershell -ExecutionPolicy Bypass -Command "openclaw onboard --install-daemon --verbose"命令跑完后,用openclaw doctor做一次自检,它会检查 daemon 状态、依赖完整性和配置项:
openclaw doctor自检通过后,再确认 daemon 进程确实在跑:
# Linux / macOS ps aux | grep openclaw # Windows PowerShell Get-Process | Where-Object { $_.ProcessName -like "*openclaw*" }最后做一次端到端验证:让 OpenClaw 通过 TaoToken 通道发一个最小请求,确认模型能正常返回。这一步同时验证了「依赖修复成功」和「通道配置正确」两件事。如果你在验证模型响应时想换个更轻的方式,可以直接在模型对话页发同一句 prompt 做对照:
模型对话:https://taotoken.net/model-chat?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_tslib
5. 本篇常见错排查
报错依旧但文件已存在:多半是 Node 版本和包的导出规则不匹配。切到 Node 20 LTS 后重装,别在旧版本上反复试。
重装后报权限错误:Windows 下用管理员 PowerShell,Linux/macOS 下检查全局目录归属,必要时用sudo或改 npm 全局前缀到用户目录。
npm install卡在某个包不动:先npm cache clean --force,再确认镜像源可用。国内环境可以临时切镜像源加速,但装完建议切回官方源,避免镜像同步延迟导致版本对不上。
daemon 启动后立刻退出:看openclaw doctor的输出,通常是配置里 Key 或接入地址写错。确认用的是https://taotoken.net/api,且 Key 从环境变量读取而不是硬编码。
降级后仍报 tslib 缺失:说明问题不在版本,而在安装路径残留。回到 3.3,把全局目录里的 openclaw 相关文件和 node_modules 彻底删干净再装。
改了配置但 daemon 没生效:daemon 通常需要重启才会重读配置。改完配置后重启 daemon,再跑一次openclaw doctor确认。
6. 长期跑编码与 Agent:把通道固定下来
如果你不只是偶尔用 OpenClaw,而是长期跑编码任务或 Agent 流程,建议把 TaoToken 通道固定成一套配置,避免每次重装都重新配。Key 统一从环境变量读,接入地址写死成https://taotoken.net/api,这样依赖升级、版本回退都不会影响通道本身。
需要长期跑编码和 Agent 的场景,可以看下 Coding Plan,它更适合把模型调用稳定接进日常开发流:
Coding Plan:https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_tslib
接入细节和参数说明都在文档里,遇到配置项不确定时对照着改:
接入文档:https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content=openclaw_tslib
回到这条报错本身,Cannot find module './internal/tslib.js'的核心就一句话:本地依赖文件缺失或路径解析失败,和 API 通道无关。按「确认文件缺失 → 对齐 Node 版本 → 清理安装路径」三步走,基本都能修好。修完记得用openclaw doctor和一次真实请求做双重验证,别只看命令没报错就以为成了。