🛠️ “我更新了 EAS CLI,但仍然收到警告!” 终端 PATH 的秘密生活
Source: Dev.to
Introduction
如果你曾经使用 Expo Application Services(EAS)并看到以下警告:
★ eas-cli@16.28.0 is now available. To upgrade, run npm install -g eas-cli. Proceeding with outdated version.
……然后去升级,打开同一个终端,却看到完全相同的警告,那么你就遇到了经典的开发者环境陷阱!本文将解释为什么会出现这种情况,以及为什么简单的解决办法——运行 npx eas-cli build——能立刻解决问题。
The Problem: When eas build Fails
用户最初的构建因依赖错误而失败:
The 'expo-modules-autolinking' package has been found, but it seems to be incompatible with '@expo/prebuild-config'
Error: build command failed.
这种不兼容通常需要**最新版本的 eas-cli**才能正确解析项目依赖。用户执行了正确的升级命令:
npm install -g eas-cli
但当他们再次尝试构建时,CLI 仍然提示它已过期:
cathy@Cathys-MacBook-Air-2 workout_app % eas build --platform ios --profile development
★ eas-cli@16.28.0 is now available.
To upgrade, run npm install -g eas-cli.
Proceeding with outdated version.
这形成了一个令人困惑的循环!工具已经更新,但命令仍在使用旧版本。为什么会这样?
The Root Cause: The Terminal’s PATH Cache
当你输入 eas build 之类的命令时,shell(例如 zsh 或 bash)并不知道 eas 可执行文件具体位于何处。它会在一个名为 $PATH 的环境变量中列出的目录列表里搜索。
- 旧的
eas位置: 第一次全局安装eas-cli时,shell 在某个特定路径(例如/usr/local/bin/eas)找到了它。 - Shell 缓存: 为了加快速度,终端通常会缓存(记住)你在当前会话中使用过的命令所在位置。
- 升级过程: 当你运行
npm install -g eas-cli时,新的二进制文件会被安装,通常仍在相同位置。 - 冲突产生: 然而,当前打开的终端会话仍在使用它缓存的旧
eas可执行文件位置。即使文件本身已被覆盖或系统需要刷新路径,终端仍指向旧版本的路径。
这就是为什么常见的排查步骤是关闭并重新打开终端——它会强制 shell 清除缓存并重新扫描 $PATH。
The Elegant Solution: Using npx
与其去处理缓存或重新启动终端,我们可以使用一个现代的 Node.js 工具——npx,它提供了可靠的快捷方式。
可行的修复方式:
npx eas-cli build --platform ios --profile development
How npx Saves the Day
- 绕过
PATH:npx(Node Package Execute)专为执行 Node.js 包的可执行文件而设计。关键是,它不依赖于 shell 缓存的PATH。 - 智能解析: 当你运行
npx eas-cli …时,它首先检查项目本地的node_modules是否有该二进制文件。如果没有(全局工具如eas-cli正是如此),它会立即执行最新的全局安装版本,忽略当前 shell 会话中的任何陈旧缓存。
使用 npx,你可以确保执行的是系统上最新的工具版本,避免了 shell 缓存和环境变量带来的所有麻烦。
Key Takeaways for Developers
- 简单的修复: 在全局工具更新后关闭并重新打开终端。
- 可靠的修复: 在命令前加上
npx前缀(例如npx)。
继续编码,构建愉快! 🚀