私が歌川です

@utgwkk が書いている

M1 Mac・Node.js 14系でcreate-react-appで作ったアプリケーションをyarn startで立ち上げようとするとメモリエラー

tl;dr

  • Node.js 15.3.0 では直っている
    • Node.js 16がもうじき出るので、出たらLTSでもM1 Macネイティブ対応できてよさそう
  • FAST_REFRESH 環境変数に false を設定して yarn start するのでも回避できる
    • Node.js本体のバージョンを上げられないけどM1 Macを使いたいときはこうすることになる?
  • あるいはRosetta経由でNode.jsをインストールすると回避できる? (未確認)

起こったこと

Node.js 14.16.1 で、 create-react-app で作ったばかりのアプリケーションを yarn start で立ち上げる (実体は react-scripts start) と、以下のようなスタックトレースが出てアプリケーションの立ち上げに失敗した。

Starting the development server...


<--- Last few GCs --->

[57242:0x138008000]     1858 ms: Scavenge 88.9 (121.6) -> 79.7 (121.6) MB, 5.1 / 0.0 ms  (average mu = 0.993, current mu = 0.993) task 


<--- JS stacktrace --->

FATAL ERROR: wasm code commit Allocation failed - process out of memory
 1: 0x100ce19d8 node::Abort() [/Users/utgwkk/.nodenv/versions/14.16.1/bin/node]
(省略)

yarn buildyarn test は問題なく動いた。

原因と対処方法

症状としては以下のissueに挙がっているものに近そう。

github.com

react-refresh-webpack-pluginというライブラリの機能を使うときにエラーになっているらしい。

github.com

Node.js 本体の以下のコミットで直っており、Node.js 15.3.0のリリースに含まれている、ということなのでNode.js 15.3.0以降では直っている。

github.com

また、 env FAST_REFRESH=false yarn start のように FAST_REFRESH 環境変数を設定する*1のでもひとまず回避できる。Node.js本体のバージョンを上げられないけどM1 Macを使って開発したい場合はこうすることになりそう。あるいはRosettaを使ってNode.jsをインストールするとか?