TL;DR
同時実行できるリクエスト数が多いと、依存関係をインストール中にパス参照に失敗して No such file or directory
となってインストールに失敗する。そのために --network-concurrency
を小さくする(ex. 1、2、4)ことで回避できる
https://yarnpkg.com/configuration/yarnrc
shellの場合
yarn install --network-concurrency 1
yarnrcに記載する場合
networkConcurrency: 1
デフォルトは15なので、並行で実行しないことで多少実行時間が遅くなってしまうことには注意。
なぜこの記事を書くのか
表題のエラーに関する記事は大体2017年くらいから議論はされているものの、ちゃんと原因まで抑えた日本語のエラー記事が見当たらなかったのでまとめた感じです。できることなら、エラー原因をきっちり抑えて対処したいので。むしろ、この記事が間違っていたり正しい理由を知ってる方がいましたら、ぜひコメントにてご教授いただけると。
原因
この辺の議論が近いかなと。
yarnがインストールする多くのファイルと深いフォルダー構造に対して、同時実行で mkdir/copy 操作を行っているときにインストールが失敗しやすいといったところが原因らしい。
表題の ${directory}
の前に着くコマンドは、パス参照が関わるようなコマンドになるので、今回のような open
に限らず chmod
とか mkdir
コマンドとかが類似するエラーとしてヒットするような気がする。
なので、コード自体の間違いというよりも、yarnの持つ仕様って感じで抑えると良さそう。