この記事には
- nodebrew経由でNode.jsをインストールしたmacに、
- yarnをインストールした際に発生する
- 下記2つのエラー対応について書いています。
# yarn インストールコマンドの実行
$ brew install yarn --ignore-dependencies
# 1. icu4c not present or broken エラー
Error: An exception occurred within a child process:
RuntimeError: /usr/local/opt/icu4c not present or broken
Please reinstall icu4c. Sorry :(
# 2. node not present or broken エラー
Error: An exception occurred within a child process:
RuntimeError: /usr/local/opt/node not present or broken
Please reinstall node. Sorry :(
エラーの原因
下記コマンドで発生するエラーの原因は、yarnに必要なパッケージが足りないことにありました。
$ brew install yarn --ignore-dependencies
そもそもyarnのインストールには2つの方法があります。
1. 通常のyarnインストール
通常、Homebrewでyarnをインストールする場合は下記コマンドを実行します。
$ brew install yarn
このコマンドを実行すると3つのパッケージがインストールされます。
- icu4c
- node
- yarn
これはHomebrewのlist
コマンドで確認できます。
$ brew list
icu4c yarn node ...
2. nodebrew経由でNode.jsをインストールした場合
Node.jsを「nodebrew」経由でインストールした場合は--ignore-dependencies
オプションを付けて実行します。
$ brew install yarn --ignore-dependencies
このオプションをつけるとyarnのみがインストールされ、Node.jsが2重にインストールされるのを防ぎます。
つまりHomebrew内にicu4c
とnode
がないことによりエラーが発生したのです。
エラー対応
3つの手順でyarnをインストールします。
1. icu4c not present or broken エラーに対応する
エラー内容
# 1. icu4c not present or broken エラー
Error: An exception occurred within a child process:
RuntimeError: /usr/local/opt/icu4c not present or broken
Please reinstall icu4c. Sorry :(
このエラーに対応するためにはHomebrewにicu4c
をインストールします。
$ brew install icu4c
list
コマンドでインストールを確認します。
$ brew list
gettext git icu4c ...
2. node not present or broken エラーに対応する
エラー内容
# 2. node not present or broken エラー
Error: An exception occurred within a child process:
RuntimeError: /usr/local/opt/node not present or broken
Please reinstall node. Sorry :(
このエラーはHomebrewにNode.jsがないことにより発生します。
しかしNode.jsは「nodebrew」経由でインストール済みであり、ここでインストールすると2重にインストールされます。
そこでyarnが参照する「node」ディレクトリにシンボリックリンクを設定します。
「node」ディレクトリを作成する
エラー内容にある通り、yarnは「/usr/local/opt/node」を参照します。
そこでディレクトリを作成します。
$ mkdir /usr/local/opt/node
シンボリックリンクを設定する
作成した「node」ディレクトリから「nodebrew」のNode.jsを参照するよう、シンボリックリンクを設定します。
$ ln -s ~/.nodebrew/current/ /usr/local/opt/node/
-
ln -s 参照元 参照元へのリンク名
... リンク名を参照しようとすると、リンク元を参照するようになる。いわゆるショートカットの役割を設定する。 -
-s オプション
... リンクにはハードリンクとシンボリックリンクの2種類が存在し、このオプションはシンボリックリンクを指定する。シンボリックリンクは、リンク名を削除しても参照元への影響はない。
3. yarn をインストールする
それではオプションを付けたyarnインストールコマンドを実行します。
$ brew install yarn --ignore-dependencies
インストールを確認しておきましょう。
$ yarn -v
1.22.4
インストールができましたね。
まとめ
下記コマンドでyarnをインストールした際にエラーが出た場合。
$ brew install yarn --ignore-dependencies
- 依存関係の
icu4c
がHomebrewにあるか確認し、 - 「nodebrew」の
node
へシンボリックリンクを設定する
この2つを実践することで対応できます。
筆者は公式のインストールコマンド$ brew install yarn
を実行し、オプションを付けた場合と何が違うのかを比較した結果、この答えにたどり着きました。
プログラミングは比較、比較それまた比較の人生です。