最近我的终端里多了一行不算友好但也不算吓人的提示:Claude Code 2.1.15 告诉我,npm 安装的方式已经弃用了。用得好好的工具突然被告知“你的装法过时了”,第一反应肯定是懵——这东西是不是不能用了?是不是官方开始清退用户了?别急,先把结论放这儿:这个提示不是故障,不是封禁,也不是让你立刻卸载重装。它是 Claude Code 在 2.1.15 里主动给你打了声招呼,官方已经调整了分发策略,npm 这条安装通道被放进了“待退役”名单。这篇内容就围绕这个弹窗讲清楚三件事:它到底在说什么、要不要立刻处理、以及迁移到官方推荐安装方式时最容易踩的坑。
1. 先别慌:2.1.15 的弹窗到底在说什么
1.1 弹窗内容与触发场景还原
先从现象说起。我在 2.1.15 版本下,用claude命令启动终端会话时,会在命令返回结果的上方看到一段明显的提示文本,核心信息就是“npm 安装的方式已经弃用,请使用原生安装器”,并给出了对应的文档地址。严格说它更像启动器里的通知,不是那种打断操作的模态弹窗,所以不按任何键、不回答任何问题,Claude Code 照样能继续工作。但问题在于,很多同学第一次碰到这种提示时,会下意识担心自己装的环境已经损坏,于是跑去执行各种修复命令,反而把原本正常的配置搞坏了。
这里我要强调一个很容易被忽略的细节:这个提示并不是报错。你可以把它理解成软件里的“版本到期提醒”——就像手机 App 提醒你“旧版本即将停止支持,请前往应用商店更新”一样。出现它,说明你当前使用的 Claude Code 是能正常运行的,只是官方希望你知道,你使用的这条安装路径已经不被推荐,后续新版本、新特性都会优先走新的安装机制。
我遇到的触发场景大体分三种:一是最近一两个月里通过npm install -g @anthropic-ai/claude-code新装的同学,二是用旧版本跑自动更新后进入 2.1.15 的同学,三是团队里用统一脚本批量部署、脚本里还写着 npm 命令的同学。这三种情况本质都一样——你的 Claude Code 是通过 npm 全局安装的,而 2.1.15 开始,官方对 npm 安装通道的态度从“可用”变成了“已弃用”。
1.2 为什么 npm 安装会被“请下桌”
要理解这件事,得先看清楚 Claude Code 最初为什么选择 npm 分发。很简单,npm 是 Node 生态最成熟的包分发通道,npm install -g一条命令就能完成下载、依赖解析、全局命令注册,跨平台行为基本一致。早期通过 npm 快速铺开,对一款命令行工具来说是最省事的方案。
但 npm 装出来的东西有个明显的结构问题:它本质是一个 JavaScript 包,跑的时候依赖机器上的 Node 运行时。版本一多,依赖树一深,各种“我这台机器能跑、那台机器报错”的事情就开始出现。你身边一定有人碰到过这类问题:npm install -g报权限错误、某台机器 Node 版本太低直接跑不起来、升级 Node 之后全局包行为发生变化、安装日志里堆满 deprecated 警告。对终端工具来说,这种不确定性是致命的——用户要的是打开就能用的命令,而不是先当半小时环境工程师。
原生安装器解决的就是这个问题。它会把 Claude Code 打包成独立的可执行文件,Node 运行时随包一起分发,不依赖系统里装了什么、版本多新多旧。实际体验最直观的变化就是启动更快、更新更稳定、对 Node 版本不再敏感。这跟桌面应用从“网页版”走向“独立安装包”是同一个逻辑:交付一个自包含的产物,把环境变量和运行时的不确定性挡在门外。
1.3 一个关键结论:弃用不等于立刻失效
网上不少人把“已弃用”理解成“马上不能用了”,这是最大的误区。在软件工程里,deprecated 和 removed 是两件事:前者只是告诉你“这条路径未来会被移除,请提前规划迁移”,后者才是“这条路径已经不存在了”。2.1.15 里的提示属于前者,你在它弹出来之后的这段时间里,继续用 npm 安装的版本干活,功能上并不会立刻被锁死。
但也不要因此不当回事。弃用提示一旦出现,通常意味着官方后续的精力不会再投入在维护这条安装路径上,新版本、新功能乃至安全修复,都可能优先只推送给原生安装器。拖得越久,你和主版本线之间的差距就越大,到最后再迁移,反而要从很老的版本一步跨到最新版,中间可能涉及的配置变动会更多。所以我的建议是:看到弹窗后不用慌,但可以顺手安排一个迁移计划,趁环境还是热乎的,花五分钟切到原生安装器,比哪天被强制迁移时手忙脚乱要舒服得多。
2. 动手前先体检:确认版本、安装方式和环境状态
在迁移之前,我强烈建议先做一次“现状体检”。原因很简单:很多人记不清自己到底是怎么装的,有些人电脑里甚至同时存在 npm 版、原生脚本装出来的一份,两个命令同名,路径互相打架。不先搞清楚现状就直接执行迁移脚本,等你的可能是更乱的局面。
2.1 三行命令看清现状
先看当前版本:
claude --version如果你是 npm 安装的,这个命令输出的一般就是当前生效的 CLI 版本号,比如 2.1.15。接下来确认这条命令到底来自哪里:
which claude # Windows 用 where claude这一步非常关键。输出的路径决定了你查的是哪一份安装。如果输出里带着 node_modules 字样,比如/usr/local/lib/node_modules/@anthropic-ai/claude-code/cli.js之类的路径,那基本可以确认你走的是 npm 全局安装。如果你看到的是~/.local/bin/claude、/usr/local/bin/claude这类独立的可执行文件路径,那你其实已经用上了原生安装器,只是还留着 npm 版的老配置没清干净。
最后再看一眼 npm 维护的全局包列表:
npm list -g --depth=0输出里如果有@anthropic-ai/claude-code,说明 npm 这条路径还占着一个全局包。这一步的目的是帮你判断迁移时要不要执行卸载,以及卸载后会不会误伤别的东西。我见过有人为了清理 Claude Code 把整个 node_modules 全局目录删了,结果其他全局工具全部消失,教训相当惨痛。
2.2 绕不开的 Windows 拦路虎:PowerShell 执行策略
Windows 用户的体检往往会卡在更前面一步:命令还没跑,先弹出一串红字,最常见的就是:
npm : 无法加载文件 ...npm.ps1,因为在此系统上禁止运行脚本这个报错的根源不是 npm 本身坏了,而是 PowerShell 的默认执行策略限制了脚本文件的运行。很多同学的 Node 是在 Windows 上装好后,直接在 PowerShell 里敲 npm 命令,而 npm 的全局命令在 Windows 上会通过一个.ps1包装脚本启动,PowerShell 默认不允许这类脚本执行,于是就有了上面的提示。
遇到这个情况,我建议先查一下当前执行策略:
Get-ExecutionPolicy -List如果显示的是Restricted,普通用户作用域下就跑不了脚本。常见的两种处理方式,一是给当前用户放开:
Set-ExecutionPolicy -Scope CurrentUser RemoteSignedRemoteSigned 意思是本地脚本可以跑,从网上下载的脚本需要有签名才能跑,这个级别对日常开发是够用的。另一种方式是在迁移安装的时候,单独用绕过策略的方式执行官方脚本,而不是图省事直接把整个系统的执行策略改成 Unrestricted。后者虽然省事,但会把系统暴露在不必要的风险里,我不推荐。
需要多说一句:这类问题不只是影响 Claude Code,你以后装任何 npm 全局工具都可能撞上。与其每次看到报错才临时处理,不如在配置开发环境的时候就把执行策略设置好,一劳永逸。
2.3 npm 镜像源的一个常见误解
体检的时候还有一个高频疑问:我已经把 npm 源切成了 npmmirror 这类国内镜像源,为什么还是收到弃用提示?很多同学以为这个弹窗是“源的问题”,换个源就消失了。其实不是。
镜像源做的只是把 npm 包仓库镜像到离你更近的位置,解决的是下载速度和稳定性问题,它并不改变包本身的元信息。Claude Code 2.1.15 的弃用提示是打包在软件里的启动逻辑,无论你是从官方源还是镜像源拉下来的,只要版本到了 2.1.15,npm 安装的版本都会显示这条提示。反过来,如果你切源之后发现提示变了,那多半是你切换到镜像源时拉到的版本有滞后,根本没升到 2.1.15,等于躲过了提示但也没拿到新版本。
这里也顺带提醒一句:用镜像源没问题,但要注意镜像源的更新同步通常会有延迟。如果你发现npm view @anthropic-ai/claude-code version看到的版本长期低于社区里大家讨论的最新版本,不妨用官方源看一眼是不是同步延迟导致的。团队做自动化部署的话,别把“固定镜像源 + 固定版本”写死,给版本留一点弹性,可以减少很多不必要的半夜维护。
3. 三平台迁移实录:从 npm 版切到原生安装版
体检做完了,确认自己确实是 npm 安装、版本 2.1.15,接下来就是正儿八经的迁移操作。我按三个平台分别写,命令都是我在实际环境里跑过、验证过的,你可以当成操作手册直接抄。
3.1 macOS 迁移:两条命令完成切换
macOS 下的操作比较干净。先在终端执行官方原生安装脚本:
curl -fsSL https://claude.ai/install.sh | bash脚本会把原生版 Claude Code 安装到用户目录的 bin 路径,并在 PATH 里注册好,通常不需要 sudo。装完顺手验证:
claude --version如果输出还是旧版本号,用 which 确认一下命令指向哪里。如果你之前通过 npm 全局安装的路径在 PATH 里排在更前面,新装的命令会被旧的盖住,这时候要么把新路径挪到前面,要么直接把 npm 残留卸掉:
npm uninstall -g @anthropic-ai/claude-code卸载之后再开一个新的终端窗口,执行claude --version,正常就应该看到原生安装器给出的版本号,启动响应通常也会明显变快。这里有个小坑:有些同学在 macOS 上用的是 Homebrew 装的 Node,npm 全局包路径会被安装到 Homebrew 的目录里,卸载命令可能因为没有权限而失败。这时候可以看看错误信息,如果确实报权限,可以加上sudo,或者检查一下npm prefix -g确定的全局目录是否归你控制。
3.2 Ubuntu / Linux 迁移:脚本权限是最大的坑
Linux 上同样用安装脚本:
curl -fsSL https://claude.ai/install.sh | bash但我在 Ubuntu 上帮同事排查时,遇到频率最高的问题不是脚本本身,而是两个衍生问题。第一个是执行完脚本后找不到命令,原因在于原生安装器默认装在~/.local/bin(或者脚本自己约定的用户 bin 目录),而很多 Linux 发行版的默认 PATH 里没有这个路径。Shell 找不到可执行文件,自然就告诉你claude: command not found。解决方法很直接,把下面这行追加到你的~/.bashrc或~/.zshrc里:
export PATH="$HOME/.local/bin:$PATH"然后source ~/.bashrc让配置先生效。注意改完配置后要确认 PATH 里没有重复堆叠同样的路径,我见过有人每遇到一次命令找不到就往配置里加一行,最后 PATH 被撑得又长又乱,反而拖慢了 Shell 启动速度。
第二个坑是脚本来源信任的问题。curl | bash这种执行方式本质上是“下载一段脚本然后直接运行”,虽然官方文档就是推荐这么干的,但团队里有安全规范的话,建议先下载下来看一眼再执行,或者至少约定好脚本的校验方式。在个人开发机上,我的习惯是先用curl -fsSL <url> -o install.sh下载下来,确认脚本内容没有可疑操作之后再bash install.sh。这套习惯用不了三十秒,但能帮你避开很多供应链上可能出现的意外。
3.3 Windows 迁移:原生安装脚本与残留清理
Windows 上的迁移我建议全程在 PowerShell 里操作,官方给的原生安装方式同样是一段脚本:
powershell -ExecutionPolicy Bypass -Command "irm https://claude.ai/install.ps1 | iex"注意这里主动加了-ExecutionPolicy Bypass,是为了让当前命令即使碰上 PowerShell 默认禁止脚本的策略也能执行,它只影响这一次命令,不会改系统全局设置。如果你在上面 2.2 里已经调整过 CurrentUser 的执行策略,那这里不加 Bypass 通常也能跑,但加上更保险。
装完原生版后,同样要处理一下 npm 残留,PowerShell 里执行:
npm uninstall -g @anthropic-ai/claude-codeWindows 上还有一个容易踩的坑:npm 全局命令在 Windows 下通常落在 Node 安装目录里,和系统程序放在一起,卸载时可能会因为权限问题报错。这种情况无非两条路:用管理员权限打开 PowerShell 再卸载,或者不动它,只是确保 PATH 里原生版路径排在 npm 全局目录前面,让claude命令始终命中原生安装的那一份。管理员权限这个点,仅限在你确实需要时使用,日常操作不建议一直开着管理员角色。
3.4 迁移后的配置保留问题
很多同学迁移前最担心的其实是配置:我辛苦配的 settings、自定义的模型配置、绑定的账号信息,切换安装方式之后会不会全部归零?放心,不会。Claude Code 的配置默认放在用户主目录下的~/.claude目录里,安装方式只是决定命令本体从哪来,配置文件是独立的。你的 settings.json、项目级 .claude 目录、以及认证信息,迁移后原样保留,不需要重新配置。
我迁移完成后的标准验证动作有三步:
- 执行
claude --version,确认版本号符合预期且来自新路径。 - 执行
claude进入交互界面,确认能正常对话,认证状态没有掉。 - 跑一个真实的小任务,让 Claude Code 真正读写一次项目文件,确认工具链没有因为迁移产生异常。
这三步走完,迁移基本就算闭环了。顺带说一句,如果迁移前你确实搞过什么特殊配置,比如自定义了启动参数、改了全局权限之类的,建议迁移时顺手把这些配置分门别类地放到项目级的.claude目录里,而不是全部堆在全局配置下,后续换机器、换团队协作时会轻松很多。
4. 迁移后的常见问题与排查技巧
迁移是一个动作,但迁移完之后的事情才是大头。这段时间我把在社区里、工作里收集到的典型问题整理成了一个小专题,每个问题都附上排查思路,你可以当成速查表用。
4.1 版本还是旧的:为什么总是更新了个寂寞
这是迁移后出现频率最高的问题,表现是:明明跑完了官方安装脚本,claude --version输出还是 2.1.15 或者更老的版本。遇到这种情况,先用which claude(Windows 用where claude)查一下实际命中路径。绝大多数情况下,答案是 PATH 里有多个 claude,npm 全局安装的那一份排在前面,Shell 优先命中了它。
解决办法就是我前面说过的:要么调整 PATH 顺序,要么干脆把 npm 残留卸载。卸载后再开新终端验证,基本都能解决。但如果在清理完之后依然显示旧版本,那就要检查一下~/.claude目录下有没有什么本地脚本在做版本覆盖,或者你之前配置过某些自动化脚本会强制把 claude 命令软链到特定路径。这种层层嵌套的情况不常见,但排查思路就是沿着 PATH 一条条捋,耐心一点总能找到。
4.2 command not found:PATH 问题的一堂经典课
迁移到原生安装器之后,新开一个终端,敲claude,给出一句command not found。这个我在 Linux 上帮人处理过太多次了,原因就一句话:原生安装器把可执行文件放到用户 bin 目录,但你的 PATH 里没有这个目录。终端只知道去 PATH 列出的目录里找命令,找不到自然就报这个错。
处理办法:先确认可执行文件确实存在,比如ls ~/.local/bin/claude,存在的话就把目录加进 PATH。我前面给出的export PATH="$HOME/.local/bin:$PATH"依然适用。这里多说一句,很多同学改完.bashrc之后发现新终端还是不生效,多半是因为没有用source或没有重新打开终端,配置文件是登录时加载的,改完不重载当然不生效。
4.3 那串 node-domexception 的 deprecated 警告要理它吗
安装过程中,不少同学的日志里会出现这样一行:
npm warn deprecated node-domexception@1.0.0: use your platform's native DOMException这行警告曾经吓到过不少人,我要告诉你的是:这条警告不用管,跟你当前的迁移问题毫无关系。它是 npm 在解析包依赖树时,发现某个传递依赖里用到了 node-domexception 这个历史包,而这个包已经被标记为弃用,于是顺手给出了提示。npm 的依赖树里存在已弃用的包是很常见的事,尤其是老一点的依赖,只要它不引发实际功能问题,一般不需要专门处理。
你现在要做的是关注 Claude Code 自己的安装路径是否切换到位,而不是去管依赖树里哪个第三方包被标记了 deprecated。反过来,如果你看到的是安装失败或者运行报错,那才需要沿着日志往上找真正的失败点,而不是被这一行警告带偏方向。
4.4 VSCode 里配置 Claude Code:终端和扩展是两回事
很多同学在用 VSCode 的时候会问,我在命令行把 claude 迁移好了,VSCode 里是不是也要重新配?要分两种情况看。第一种是你只在 VSCode 的集成终端里手动敲claude命令,这种最简单,集成终端本质上就是一个终端,它用到的还是你 PATH 里的同一个 claude,命令行迁移好了之后,集成终端里自然也是新版。如果出现版本不一致,大概率是 VSCode 继承的 PATH 跟你在.bashrc里配的最新 PATH 不一致,重启一下 VSCode 就好。
第二种是你装了 VSCode 里相关的扩展、插件,比如把 Claude Code 绑定成编辑器里的面板或快捷键。这种情况下,扩展内部的运行机制是独立的,有些扩展会在配置项里让你自己指定 claude 可执行文件的路径,你就需要把路径更新为原生安装器的新位置。具体的配置入口每个扩展不太一样,但找配置项的关键词一般是 claude path、cli path 之类的,设置成原生版的实际路径即可。
4.5 想把其他模型接进来怎么配
这是一个被问得非常多的话题,很多朋友在用 Claude Code 时,因为 API 额度、计费方式或者使用习惯的原因,想把它接到兼容 Anthropic 协议的第三方服务上。社区里最常见的做法是通过环境变量指定基础地址和令牌,比如设置ANTHROPIC_BASE_URL、ANTHROPIC_AUTH_TOKEN这类变量,把模型请求指向兼容的端点,再配合ANTHROPIC_MODEL选择具体模型。像 DeepSeek 这样的服务商就提供了兼容 Anthropic 协议的接入端点,不少同学就是通过这种方式在 Claude Code 里使用不同模型的。
需要提醒的是,这种接法属于社区实践,不是 Claude Code 官方推荐的主路径,接入前最好先确认你用的端点和密钥来自正规的服务商,并且留意密钥的保管,别随手写进仓库里。另外,切换模型后如果出现工具调用异常、上下文格式不符这类问题,优先检查端点协议版本是否完全兼容 Anthropic 的消息格式,很多时候是兼容度的问题,不是模型本身的问题。
4.6 手动安装 GitHub 上的 Skills:文件的落地路径
Claude Code 2.x 里对 skills 的支持是很多同学喜欢的功能,常被问到“怎么手动把 GitHub 上别人写的 skill 装进去”。其实逻辑非常简单:Claude Code 会在用户级和项目级分别扫描 skills 目录,用户级默认是~/.claude/skills,项目级是项目里的.claude/skills。你把哪个 skill 的文件夹完整放进去,它在对话里就能被加载到。
实操上,我建议先手动把 GitHub 仓库克隆或下载下来,看清楚目录里是不是有对应的 skill 定义文件(比如 SKILL.md),再把整个目录复制到~/.claude/skills下,重启 Claude Code 生效。这里有几个坑值得提前避开:一是不要只复制单个文件,有些 skill 依赖目录里的其他资源;二是如果 skill 有版本更新,旧目录要彻底删掉再放新的,避免新旧混在一起;三是项目级和用户级的 skills 不要重名,否则可能出现加载冲突。
最后再分享一点我自己的习惯。Claude Code 这类工具迭代非常快,安装方式从 npm 走向原生安装器只是它演进路径上的一个节点,以后大概率还会有新的分发形态。我的应对方法是:每过一段时间主动看一眼官方文档的安装说明,确认自己手上的安装方式还在不在推荐列表里;同时在团队文档里把安装步骤写成“官方脚本优先”而不是“执行这条 npm 命令”,这样新同事入职时就不会把老路径当默认路径继续扩散下去。这次 2.1.15 的提示说白了是一次善意的提醒,顺着它走,把安装方式切换到原生安装器,后面用起来反而更省心。如果你也刚撞见这个弹窗,别急着折腾,按上面的步骤先体检再迁移,五分钟内就能把事情办完。