こんにちは、ReactNativeとEXPOを利用しアプリ開発しているtakaです。
3ヶ月ほど放置していたアプリケーションでbuildが実行できなくなりました。
今回の記事では、その解決方法を解説していきます。
$ expo build:android
expoアプリの立ち上げも同様にできません。
$ expo start
その時の解決方法をこの記事では解説していきます。
状況
EXPOを利用し作成していたReactNativeアプリがあります。
3ヶ月ほど前は問題なく、「expo build:android」を実行できていたのですが、久しぶりに実行しようとすると以下のエラーが出ました。
ERROR: Node.js v10.19.0 is no longer supported.
expo-cli supports following Node.js versions:
* >=12.13.0 <13.0.0 (Maintenance LTS)
* >=14.0.0 <15.0.0 (Active LTS)
* >=15.0.0 <17.0.0 (Current Release)
ふむふむ、書いてある通りNode.jsの今使っているバージョンがv10.19.0で古くなったっぽいですね。
バージョンアップしてくれと書いてあります。
ちなみにLTSは(long-term supportの略で長期サポートという意味です)
- Maintenance LTS=最低限のサポート期間
- ACTIVE LTS=長期サポート対象期間
- Current Release=最新版
解決方法
まず言われた通り、Node.jsのバージョンを変更しましょう。
今のバージョンを一応確認します。
$ nodebrew ls
v8.12.0
v8.17.0
v9.11.1
v10.19.0
current: v10.19.0
v10.19.0ですね。
それでは新しいNode.jsのバージョンを入れます。
$ nodebrew install-binary v12.22.3
ちゃんと入ったか確認。
$ nodebrew ls
v8.12.0
v8.17.0
v9.11.1
v10.19.0
v12.22.3 //<-追加された
current: v10.19.0
ちゃんと入っていますね。
バージョンを切り替える。
$ nodebrew use v12.22.3
もう一度expo build:androidを実行して見ます。
$ expo build:android
Unable to find expo in this project - have you run yarn / npm install yet?
expoが入っていないだと?
expoのバージョンを確認します。
$ expo --version
4.12.0
あるではないか。
調べてみると、package.json内に記載されているパッケージのバージョンをアップデートしないといけないようだ。
このコマンドでバージョンのインストールしたパッケージに新しいバージョンが存在するかどうか確認します。
$ npm outdated
詳しくはこちら
こちらのコマンドでパッケージのバージョンをアップデートしていきます。
$ npx -p npm-check-updates -c "ncu"
パッケージのアップデートができました。
それではexpo build:androidしてみます。
$ expo build:android
Cannot determine which native SDK version your project uses because the module `expo` is not installed. Please install it with `yarn add expo` and try again.
npm installする必要がありました…
$ npm install
tips!
package.jsonよりpackage-lock.jsonの方を優先します。npm installうまくできない場合はpackage-lock.jsonを削除しよう。
rm -rf package-lock.json
で消せます。
これでOKか?
$ expo build:android
✔ Choose the build type you would like: › apk
Checking if there is a build in progress...
› Expo SDK: 42.0.0
› Release channel: default
› Workflow: Managed
Building optimized bundles and generating sourcemaps...
Starting Metro Bundler
Unable to resolve module expo-permissions from /Applications/ReactNative/myApp/App.js: expo-permissions could not be found within the project.
If you are sure the module exists, try these steps:
1. Clear watchman watches: watchman watch-del-all
2. Delete node_modules and run yarn install
3. Reset Metro's cache: yarn start --reset-cache
4. Remove the cache: rm -rf /tmp/metro-*
12 | import * as Notifications from "expo-notifications"; //アプリの通知
13 | import * as ScreenOrientation from "expo-screen-orientation"; //画面の縦横のロック
> 14 | import * as Permissions from "expo-permissions"; //push通知の許可
別のエラーが出ていますね。
「expo-permissions」がインストールされていないようなのでインストールします。
$ expo install expo-permissions
Installing 1 SDK 42.0.0 compatible native module using Yarn.
> yarn add expo-permissions@~12.1.1
spawn yarnpkg ENOENT
Error: spawn yarnpkg ENOENT
at Process.ChildProcess._handle.onexit (internal/child_process.js:268:19)
at onErrorNT (internal/child_process.js:470:16)
at processTicksAndRejections (internal/process/task_queues.js:84:21)
うまくインスールできなかったので「–npm」をつけます。
$ expo install expo-permissions --npm
インストールできました。
$ expo build:android
・・・
Android Bundling complete
やっとできました!