TypeError: cli.init is not a function for React Native
问题描述
在使用 M1 芯片的 MacBook Air 上运行 npx react-native init appName
命令时,出现以下错误:
TypeError: cli.init is not a function
at run (/opt/homebrew/lib/node_modules/react-native-cli/index.js:302:7)
at createProject (/opt/homebrew/lib/node_modules/react-native-cli/index.js:249:3)
at init (/opt/homebrew/lib/node_modules/react-native-cli/index.js:200:5)
at Object.<anonymous> (/opt/homebrew/lib/node_modules/react-native-cli/index.js:153:7)
...
这个错误表明 React Native CLI 存在兼容性问题或版本冲突,特别是在 React Native 0.69.0 及以上版本中。
解决方案
清除全局安装的旧版 CLI
首先需要清除可能存在的旧版全局安装的 React Native CLI:
# 卸载全局的 react-native-cli
npm uninstall -g react-native-cli @react-native-community/cli
# 验证是否已清除
npm -g list | grep react-native
# 卸载全局的 react-native-cli
yarn global remove react-native-cli @react-native-community/cli
# 验证是否已清除
yarn global list | grep react-native
注意
如果您曾经使用 Homebrew 安装过 React Native CLI,也需要一并卸载:
brew remove react-native-cli
使用正确的初始化命令
根据 React Native 官方文档推荐,现在应该使用以下命令创建新项目:
npx @react-native-community/cli@latest init ProjectName
或者使用 React Native 内置的 CLI:
npx react-native@latest init ProjectName
使用特定版本(备选方案)
如果最新版本仍有问题,可以尝试使用较早的稳定版本:
npx react-native init ProjectName --version 0.68.2
创建项目后再升级到最新版本。
清理缓存和残余文件
如果上述方法均无效,可能需要清理全局的 node_modules 缓存:
- 检查并删除用户目录下的 node_modules 文件夹
- 删除可能存在的旧项目残余文件
- 清理 npm 或 yarn 缓存:
npm cache clean --force
yarn cache clean
原理解析
此问题通常是由于全局安装的旧版 react-native-cli
与新版 React Native 不兼容导致的。React Native 团队已将其 CLI 工具迁移到 @react-native-community/cli
,并且现在推荐使用 npx
来运行最新版本的 CLI,而不是全局安装。
最佳实践
- 避免全局安装
react-native-cli
,始终使用npx
来调用最新版本 - 定期清理全局包,防止版本冲突
- 遵循 React Native 官方文档的安装指南
参考资源
通过上述方法,您应该能够解决 TypeError: cli.init is not a function
错误并成功创建 React Native 项目。