TypeError: cli.init is not a function の解決方法
React Nativeで新しいプロジェクトを作成しようとする際に TypeError: cli.init is not a function
エラーが発生することがあります。この問題はReact NativeのCLIのバージョン互換性やグローバルインストール時の競合が主な原因です。
問題の原因
このエラーは以下の状況で発生します:
- 古いバージョンの
react-native-cli
がグローバルにインストールされている - 複数のCLIパッケージが競合している
- React Nativeのバージョン互換性の問題
エラーメッセージ例:
TypeError: cli.init is not a function
at run (/opt/homebrew/lib/node_modules/react-native-cli/index.js:302:7)
解決方法
方法1:最新のReact Native Community CLIを使用する(推奨)
現在、React Native公式ではコミュニティCLIを使用することを推奨しています:
npx @react-native-community/cli@latest init AwesomeProject
この方法が最も信頼性が高く、公式ドキュメントでも推奨されています。
方法2:グローバルパッケージのクリーンアップ
WARNING
古いグローバルパッケージが残っていると競合が発生します。以下のコマンドで完全に削除してください。
Node.jsのパッケージマネージャーに応じて、以下のコマンドを実行します:
# グローバルパッケージの確認
npm list -g --depth=0
# 古いCLIパッケージのアンインストール
npm uninstall -g react-native-cli @react-native-community/cli react-native
# 新しいCLIのインストール
npm install -g @react-native-community/cli
# プロジェクト作成
npx @react-native-community/cli@latest init AwesomeProject
# グローバルパッケージの確認
yarn global list
# 古いCLIパッケージのアンインストール
yarn global remove react-native-cli @react-native-community/cli react-native
# 新しいCLIのインストール
yarn global add @react-native-community/cli
# プロジェクト作成
yarn react-native init AwesomeProject
# Homebrewでインストールした場合の削除
brew uninstall react-native-cli
方法3:特定のバージョンを指定してインストール
一時的な回避策として、安定版の特定バージョンを指定する方法もあります:
npx react-native init ProjectName --version 0.68.2
ただし、これは一時的な解決策であり、最新バージョンへのアップグレードを推奨します。
ベストプラクティス
- グローバルインストールを避ける: 最新のReact NativeではグローバルCLIの必要性が低下しています
- npxを使用: 常に最新バージョンのCLIを使用できます
- 公式ドキュメントを参照: React Native環境設定ガイドに従ってください
トラブルシューティング
上記の方法で解決しない場合:
- Node.jsのキャッシュをクリア:
npm cache clean --force
- node_modulesディレクトリとpackage-lock.jsonを削除:
rm -rf node_modules package-lock.json
npm install
- Node.jsとnpm/yarnを最新バージョンにアップデート
まとめ
TypeError: cli.init is not a function
エラーは、主に古いCLIパッケージの競合が原因です。最も効果的な解決方法は、公式推奨の @react-native-community/cli
を使用することです。プロジェクトを作成する際は、常に最新の公式ドキュメントを参照することをお勧めします。
INFO
React Nativeの開発環境は頻繁に更新されるため、定期的に環境のメンテナンスを行い、古いパッケージをクリーンアップしましょう。