首先,提到
旧版的expo-cli不支持Node +17
,建议迁移到版本化的Expo CLI,也就是npx expo
。都详细介绍了新的@expo/cli,说明它更轻量、更快,并且是作为expo包的一部分,通过npx expo来运行,取代了全局安装的旧版cli
。和讨论了如何解决旧版cli的问题,比如卸载全局安装的expo-cli,改用本地npx expo。也提到现代的Expo CLI已经集成在expo包中,不需要单独安装,用npx运行即可。然后,用户的问题里提到eas-cli,和提到eas-cli是用于构建和提交应用的工具,和新的Expo CLI一起使用。也提到EAS是Expo Application Services的一部分,负责构建和部署应用。
综合这些信息,可以总结出:旧版全局expo-cli已经被弃用,现在推荐使用npx expo来执行命令,同时结合eas-cli进行应用构建和部署。迁移步骤包括卸载旧版cli,使用npx expo start等命令,同时可能需要调整项目配置以适应新的CLI版本。此外,新版的CLI更符合Node.js标准,支持更多现代功能,如预构建、本地运行等,提升开发体验。
需要注意的是,部分证据可能存在时间上的差异,比如是2023年的,而其他资料如是2025年的,可能更新更准确。但根据大多数较新的证据,可以确定迁移到npx expo和eas-cli是当前推荐的做法。另外,和提供了具体的命令示例,比如npx expo run:android等,说明新CLI的具体用法。
Expo CLI 的演进和迁移路径可以总结如下:
1. 旧版全局 Expo CLI 已被取代
- 旧版全局安装的
expo-cli
存在兼容性问题(如不支持 Node.js 17+ 版本),且官方已明确推荐迁移到新版本地化 CLInpx expo
,同时结合eas-cli
进行应用构建和部署。 - 新版 CLI 作为
expo
包的一部分,无需全局安装,直接通过npx expo
调用,更符合 Node.js 标准并提升开发体验。
2. 新版 CLI 的优势
- 轻量高效:新版
@expo/cli
更轻量,启动速度更快,专注于核心功能(如启动开发服务器、预构建、运行应用等)。 - 本地化版本控制:通过
npx expo
使用项目本地安装的 CLI 版本,避免全局版本冲突,尤其适用于 SDK 46 及以上项目。 - 功能增强:
- 支持安全的 Manifest 签名和认证。
- 集成预构建(
npx expo prebuild
)生成原生代码,长期兼容性更好。 - 提供调试工具、环境变量支持、自动化端口检测等。
3. 迁移步骤
- 卸载旧版 CLI:
npm uninstall -g expo-cli # 或使用 yarn global remove expo-cli[[8, 20]]
- 使用新版 CLI:
- 初始化项目:
npx create-expo-app
。 - 启动开发服务器:
npx expo start
(替代旧版expo start
)。 - 构建和运行原生应用:
npx expo run:android
或npx expo run:ios
。
- 初始化项目:
- 依赖管理:通过
npx expo install
安装兼容版本的库。
4. 结合 EAS-CLI
- 构建与部署:
eas-cli
用于云构建(如eas build
)和提交应用到商店,与新版 Expo CLI 协同工作。 - 自动化流程:支持持续集成(CI)和自动化测试,降低多平台维护成本。
5. 注意事项
- Node.js 版本:建议使用 Node.js 16.x 以避免兼容性问题(M1 用户可通过
nvm
管理版本)。 - 项目升级:旧项目可通过
npx expo upgrade
迁移到最新 SDK。 - 功能限制:部分高级功能(如
expo-dev-client
)需配合 Expo Modules API 使用。
总结
Expo 生态已全面转向以 npx expo
为核心的新 CLI 体系,搭配 eas-cli
实现端到端开发流程。这一变化提升了工具链的稳定性和开发效率,同时减少环境配置的复杂性。开发者应尽快迁移至新版工具,以充分利用 Expo 的最新功能。
相关知识:npm全局安装与npx安装包方式,为什么现在要用npx
npm(Node Package Manager)和npx(Node Package eXecute)是Node.js生态中两个互补的包管理工具,但定位和使用场景有显著差异。以下从两者的定义、优劣势到为何推荐使用npx进行详细分析:
1. npm与npx的基本定义
- npm:是Node.js的默认包管理器,用于安装、管理和发布JavaScript包。支持两种安装方式:
- 全局安装:通过
npm install -g <package>
将包安装到系统路径(如/usr/local/bin
),全局可用。 - 本地安装:通过
npm install <package>
将包安装到项目的node_modules
目录,仅在当前项目可用。
- 全局安装:通过
- npx:是npm 5.2.0+版本内置的包执行工具,核心功能是直接运行包的命令,无需事先全局或本地安装。其运行逻辑为:
- 检查本地
node_modules/.bin
是否有该包。 - 若无,则从远程仓库下载最新版本到临时缓存,执行后自动删除。
- 检查本地
2. npm与npx的优劣势对比
npm全局安装的优缺点
- 优势:
- 全局命令随处可用(如
vue create
)。 - 适合频繁使用的工具(如
webpack
、eslint
)。
- 全局命令随处可用(如
- 劣势:
- 版本冲突:全局只能安装一个版本,不同项目可能需不同版本。
- 权限问题:某些系统需管理员权限才能全局安装。
- 污染全局环境:长期积累未使用的包占用磁盘空间。
npx的优缺点
- 优势:
- 避免全局安装:临时下载并执行包,减少全局污染。
- 灵活使用版本:可指定版本(如
npx webpack@4
)或默认使用最新版。 - 简化流程:直接运行未安装的包(如
npx create-react-app
无需先全局安装)。
- 劣势:
- 首次执行需下载:依赖网络,可能增加等待时间(后续执行利用缓存)。
- 不适合高频使用:频繁调用同一包时,临时下载效率低于全局安装。
3. 为何现在推荐使用npx?
解决全局安装的痛点
- 避免版本冲突:例如,项目A需
webpack@4
,项目B需webpack@5
。若全局安装,只能保留一个版本;而npx允许按需使用特定版本,互不干扰。 - 减少权限问题:某些环境下(如CI/CD或受限系统)无法全局安装,npx通过临时缓存绕过此限制。
提升开发效率
- 简化一次性命令:如初始化项目(
npx vite
)、执行脚本(npx eslint
),无需预先安装。 - 兼容本地与全局:优先使用项目本地安装的包,确保环境一致性。例如,若项目本地安装了
webpack
,npx webpack
会直接调用本地版本。
优化项目维护
- 减少依赖声明:临时使用的包无需写入
package.json
的dependencies
,保持项目依赖清晰。 - 降低协作成本:团队成员无需同步全局环境,通过npx确保命令执行的一致性。
4. 典型应用场景
- 创建新项目:
npx create-react-app my-app
(无需全局安装create-react-app
)。 - 执行测试工具:
npx mocha --version
(本地安装后直接调用)。 - 使用不同版本包:
npx webpack@4.44.0
(指定历史版本)。 - 临时运行脚本:
npx http-server
(快速启动本地服务器)。
总结
npx的核心价值在于“按需使用” ,尤其适合临时命令、多版本需求及环境隔离的场景。而npm全局安装仍适用于高频使用的工具(如npm
、yarn
)。两者结合使用,既能保持开发效率,又能减少环境冲突,是现代Node.js开发的推荐实践。