资讯动态

Claude Code 离线安装方案揭秘:用 Verdaccio 搭建内网 npm 源

发布时间:2026/10/7 4:43:40 来源:尧图企业网站定制
1. 内网机器装不上 Claude Code问题到底卡在哪很多公司的开发机是彻底断外网的能访问的只有内网制品库和几台跳板机。你在这种机器上敲npm install -g anthropic-ai/claude-code大概率会看到一串ETIMEDOUT或者ECONNREFUSED registry.npmjs.org然后安装直接中断。这不是 Claude Code 本身的问题而是 npm 默认要去公网 registry 拉包而你的机器根本出不去。Claude Code 是一个跑在终端里的 AI 编程助手通过 npm 分发依赖 Node.js 运行时。它的依赖树不算特别夸张但也不止一个包终端交互库、HTTP 客户端、加密模块、以及 Anthropic SDK 相关的协议层封装都在里面。只要有一个中间依赖没缓存到安装就会在某个环节卡死。所以离线安装的核心不是「把 Claude Code 那个 tgz 拷进去就行」而是要把整棵依赖树完整地带进内网。适合看这篇的人有三类一是内网开发机完全隔离、需要手动搬运依赖的工程师二是团队想搭一个内网 npm 私服、让所有人不用每次手动拷包的运维或平台同学三是 CI/CD 流水线跑在内网、构建时拉不到公网包导致频繁失败的团队。这三种场景的解法层层递进从手动打包到 Verdaccio 私服我会把每一步的命令和配置都写清楚你照着做就能跑通。先说结论最省事的长期方案是用 Verdaccio 在内网搭一个私有 npm 源把 Claude Code 及其全部依赖缓存进去之后内网机器只要把 registry 指向这台私服npm install就跟在公网一样顺。下面从环境准备开始一步步来。2. 用 Verdaccio 搭内网 npm 源的前置准备Verdaccio 是一个轻量级的私有 npm 代理仓库零配置就能跑起来默认监听 4873 端口。它的工作模式很直观内网请求某个包时先查本地存储命中就直接返回没命中就通过上行链路去公网 registry 拉取并缓存下来。这意味着你只需要在一台能出网的机器上让它跑一次全量拉取之后把存储目录搬到内网内网就有了一个自包含的源。环境上你需要准备两台机器或者一台机器分两个阶段操作第一台是构建机能访问公网 npm registry用来做依赖的全量缓存。Node.js 建议 18 LTS 或更高因为 Claude Code 依赖全局fetchNode 16 及以下会报fetch is not defined。npm 版本跟着 Node 走就行npm -v确认一下在 9 以上。第二台是内网目标机完全断外网装好同版本的 Node.js。两台机器的操作系统、CPU 架构、glibc 版本尽量保持一致尤其是如果依赖里有 native addon.node文件跨架构或跨 glibc 版本会直接加载失败。关于 TaoToken 的接入这里要提前说清楚Claude Code 装好之后它需要连一个大模型服务端点才能干活。内网环境同样连不了公网 API所以你需要一个内网可达的 API 网关。TaoToken 提供兼容 Anthropic 协议的接口Base URL 是https://taotoken.net/api你可以在构建机上先把 API Key 申请好后面配置到 Claude Code 的环境变量里。API Key 的获取入口在控制台的 API Keys 页面模型对话的调试入口在模型对话页长期跑编码任务的话可以看 Coding Plan。这些链接后面 CTA 部分会再给一次。前置准备清单构建机Node.js 18、npm 9、能出网内网机同版本 Node.js、断外网一个内网可达的 TaoToken API 端点或内网网关转发传输通道U 盘、内网文件共享、或堡垒机安全通道把这些准备好就可以进入实际配置了。3. Verdaccio 配置与离线包缓存的可复制步骤这一节是核心我把 Verdaccio 的配置文件、离线缓存命令、以及 npm 指向私服的设置全部写成可直接复制的片段。你按顺序执行即可。3.1 在构建机上安装并配置 Verdaccio先在构建机上全局装 Verdaccionpm install -g verdaccio verdaccio --version装完后 Verdaccio 会在~/.config/verdaccio/config.yaml生成默认配置。我们需要改两个地方上行链路指向公网 registry以及存储目录明确出来方便后续搬运。把配置改成下面这样# ~/.config/verdaccio/config.yaml storage: /home/youruser/verdaccio-storage uplinks: npmjs: url: https://registry.npmjs.org/ timeout: 60s maxage: 30m packages: */*: access: $all publish: $authenticated proxy: npmjs **: access: $all publish: $authenticated proxy: npmjs listen: - 0.0.0.0:4873 log: type: stdout format: pretty level: http几个关键点storage指向一个你记得住的目录后面整个目录要打包搬走uplinks.npmjs.url是公网源构建机靠它拉包packages里的proxy: npmjs表示未命中的包走上行链路listen用0.0.0.0方便内网其他机器访问。改完保存启动verdaccio看到http address - http://0.0.0.0:4873/就说明起来了。另开一个终端把 npm 源临时指向它npm set registry http://localhost:4873/ npm config get registry确认输出是http://localhost:4873/。3.2 触发全量缓存现在让 Verdaccio 去公网把 Claude Code 的整棵依赖树拉下来。最直接的办法是在构建机上用一个临时项目安装一次mkdir ~/cc-cache-trigger cd ~/cc-cache-trigger npm init -y npm install anthropic-ai/claude-code --legacy-peer-deps这一步会通过 Verdaccio 代理把所有依赖的 tarball 缓存到~/verdaccio-storage里。装完后你可以验证缓存是否完整ls ~/verdaccio-storage你会看到按包名分目录的结构每个包下面有package.json和对应的.tgz。如果某个包目录是空的或者只有元数据没有 tgz说明那次拉取没成功重新跑一次npm install补齐。对于依赖树特别深的情况建议再补一条命令把 Claude Code 自身的 tarball 也显式缓存npm pack anthropic-ai/claude-code生成的anthropic-ai-claude-code-x.y.z.tgz单独留着内网安装时可以直接用。3.3 把存储目录搬到内网缓存完成后把整个~/verdaccio-storage目录打包cd ~ tar -czf verdaccio-storage.tar.gz verdaccio-storage通过内网传输通道把这个 tar 包拷到内网目标机解压到相同路径tar -xzf verdaccio-storage.tar.gz -C ~/然后在内网机上装 Verdaccio如果内网机也断网需要提前把 Verdaccio 的 tgz 也缓存好一起搬过去用同一份config.yaml但把uplinks那段去掉或者注释掉因为内网出不去留着会拖慢未命中请求的超时。改成一个纯本地源storage: /home/youruser/verdaccio-storage packages: */*: access: $all publish: $authenticated **: access: $all publish: $authenticated listen: - 0.0.0.0:4873启动 Verdaccio内网私服就活了。3.4 内网机器指向私有源并安装在内网开发机上把 registry 指向这台私服npm set registry http://内网私服IP:4873/然后正常安装 Claude Codenpm install -g anthropic-ai/claude-code如果私服缓存完整这条命令不会触发任何外网请求直接从本地存储返回。装完后配置 TaoToken 的接入信息Claude Code 通过环境变量读取 API 端点和 Keyexport ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEY你的TaoToken密钥如果你用的是 Claude Code 的 settings 文件方式可以在~/.claude/settings.json里写{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: 你的TaoToken密钥 } }注意 Base URL、Key、Model ID 这三件套要配套Base URL 用https://taotoken.net/apiKey 从控制台 API Keys 页拿Model ID 按你选的模型填。如果走的是 Coding Plan端点信息在 Coding Plan 页面有说明。4. 验证请求与安装成功结果装完不能想当然得实际验证。分三层CLI 能不能跑、依赖完不完整、请求能不能通。第一层版本校验claude --version正常输出类似1.x.x的版本号。如果报command not found说明全局 bin 没链接上检查npm bin -g路径是否在PATH里。第二层依赖完整性校验。进入任意项目目录用 Node 直接 require 入口包node -e require(anthropic-ai/claude-code)没有报MODULE_NOT_FOUND就说明依赖树完整。如果报某个具体包找不到回到构建机在package-lock.json里搜那个包名用npm pack 包名补缓存重新搬一次。第三层实际请求验证。启动 Claude Codeclaude进入交互界面后输入一个简单问题比如让它解释一下回调函数。如果能看到流式返回的内容说明 API 链路通了。如果卡在连接阶段先检查ANTHROPIC_BASE_URL是否指向了内网可达的 TaoToken 端点再确认 Key 有没有过期。你也可以用 curl 直接打 TaoToken 的接口做一次裸验证排除 Claude Code 本身的干扰curl -s https://taotoken.net/api/v1/messages \ -H x-api-key: 你的TaoToken密钥 \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-20250514, max_tokens: 64, messages: [{role: user, content: ping}] }返回里有content字段就说明端点和 Key 都没问题。这一步能帮你快速区分是网络问题还是 Claude Code 配置问题。最彻底的验证是断网重放在内网机上临时把默认网关删掉sudo ip route del default然后重新跑一次npm install -g anthropic-ai/claude-code。如果全程没有超时报错说明你的私服和缓存已经自包含离线安装真正成立。验证完记得把网关加回去。5. 离线安装常见报错排查这一节列几个真实会撞上的报错以及对应的处理方式。报错一npm ERR! code ECONNREFUSED或ETIMEDOUT指向 registry.npmjs.org说明 npm 还在往公网源打。检查npm config get registry确认输出是内网私服地址。如果之前设过项目级.npmrc项目目录下的配置会覆盖全局去项目根目录看有没有.npmrc文件有的话改成私服地址或者删掉。报错二Error: Cannot find module xxx依赖树不完整某个中间层包没缓存到。回到构建机在package-lock.json里定位这个包的完整依赖链用npm pack逐个补齐重新打包存储目录搬过去。这种情况常见于 peerDependencies 没被自动拉取的场景安装时加--legacy-peer-deps能减少这类问题。报错三Error: /lib64/libc.so.6: version GLIBC_2.28 not foundnative addon 和目标的 glibc 版本不匹配。构建机和内网机的操作系统版本要一致最稳的做法是在与内网机相同基础镜像的 Docker 容器里做缓存保证 ABI 对齐。如果已经装错了在内网机上对相关包执行npm rebuild重新编译但前提是内网机有编译工具链。报错四fetch is not definedNode.js 版本低于 18全局fetch不存在。升级到 18 LTS 或更高。如果实在升不了在 Claude Code 入口脚本顶部加 polyfillnode -e globalThis.fetch require(node-fetch)但这只是权宜之计建议还是升 Node。报错五401 Unauthorized或invalid api key这是 TaoToken 侧的鉴权问题不是 npm 的问题。检查ANTHROPIC_API_KEY是否填对有没有多余空格。如果用的是 settings.json确认 JSON 格式合法env字段下的键名大小写正确。Key 过期的话去控制台 API Keys 页重新生成。报错六local proxy failed或连接超时内网机到 TaoToken 端点不通。确认ANTHROPIC_BASE_URL指向的是内网可达的地址如果 TaoToken 端点本身在公网你需要在内网有一层转发或者网关。这一步是网络层的事跟 npm 私服无关分开排查。报错七reading choices之类的解析错误通常是返回体格式和客户端预期不一致多半是 Base URL 或 Model ID 配错了。确认 Base URL 是https://taotoken.net/apiModel ID 用你实际开通的模型标识。三件套Base URL Key Model ID必须配套缺一不可。排查顺序建议先确认 npm 源指向对不对再确认依赖完整性最后确认 API 链路。三层分开看问题定位会快很多。6. 把离线安装沉淀成团队标准流程手动搬一次包能解决眼前问题但团队里每个人入职、每台新机器都要重来一遍就太累了。把上面这套流程固化成标准制品才是长期省事的做法。具体来说把verdaccio-storage目录和config.yaml一起纳入版本管理或者制品库每次 Claude Code 发新版在构建机上跑一次缓存更新把新的存储目录打成带版本号的归档比如verdaccio-storage-20250601.tar.gz。内网私服直接替换存储目录重启即可。这样内网机器永远只需要npm set registry指向私服剩下的交给缓存。版本锁定这块要特别注意离线包制作必须基于package-lock.json保证内网装出来的依赖版本和构建时完全一致。不要用npm install不带 lock 文件去拉那样每次解析出的版本可能不同内网复现时容易出隐性问题。架构对齐也要提前做。构建机和内网机的 OS、glibc、Node 大版本、CPU 架构保持一致native addon 尽量在 Docker 容器里统一编译。跨平台搬运是离线安装最容易踩的坑提前对齐能省掉大量排查时间。最后把第 4 节的验证步骤做成一个 checklist每次部署或新人入职逐项核对版本能查、依赖能 require、请求能通、断网能重装。四项都过才算真正装好。如果你还没配 TaoToken 的接入信息现在就可以去把 Key 准备好API Key 在控制台 API Keys 页面生成模型调试可以在模型对话页先试通长期跑编码任务的话 Coding Plan 更划算。接入文档在文档页有完整的参数说明。把 Base URL、Key、Model ID 三件套配进 Claude Code 的 settings内网离线环境下的 AI 编程助手就能正常干活了。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑