NodeJS v12 で @aws-amplify/cli
をインストールすると、依存パッケージの fs-ext
のビルドがコケるけど、なぜかインストールは成功する、という気持ち悪い現象が起きています。
これを対症療法的にどうにかしましたので、記事にまとめてみました。
tl;dr
npm install -g --no-optional @aws-amplify/cli
現象
AWS Amplify を使うために、amplify コマンドをインストールします。
通常、以下のようなコマンドでインストールしますが、途中でエラーが大量発生します。😰
$ npm install -g @aws-amplify/cli
:
(中略)
:
../fs-ext.cc:281:40: error: too few arguments to function call, single argument 'context' was not specified
flock_data->fd = info[0]->Int32Value();
~~~~~~~~~~~~~~~~~~~ ^
その一方で インストールそのものは成功する という、気持ちの悪い現象が起きます。
(macOS のみ、Windows では何の問題もなくインストールできました)
調査
fs-ext
というパッケージが何か悪さをしているように見受けられるので、依存関係を確かめてみましょう。
$ npm ls -g fs-ext
/Users/kurone-kito/.anyenv/envs/nodenv/versions/12.7.0/lib
└─┬ @aws-amplify/cli@1.12.0
└─┬ amplify-util-mock@0.3.0
└─┬ amplify-appsync-simulator@0.3.0
└─┬ @conduitvc/mosca@2.8.3
└─┬ ascoltatori@3.2.0
└─┬ qlobber-fsq@3.2.4
└── UNMET OPTIONAL DEPENDENCY fs-ext@~0.5.0
ということで、fs-ext
をインストールしてみると、何事もなくうまくいきました。
最新版との間に何があったか探ってみると、以前は NodeJS 11 以降では動かなかったようです。
どうにか解決してみる
早速 NodeJS をバージョンダウンしてインストールしてみます。
筆者の環境だと、v10 でも別のエラーが出て、v8 でようやくちゃんとインストールできました。
とはいえ、v12 の機能が使えないのは辛いので、別の手を考えてみます。
先ほどのツリーをみると、UNMET OPTIONAL DEPENDENCY
という表示が気になります。つまり、このパッケージは必須ではない ということです。
つまり、上記コマンドで解決です 😌
npm install -g --no-optional @aws-amplify/cli
考察
qlobber-fsq
や ascoltatori
あたりは最新でも死ぬので、この辺の古い依存関係に根本的な原因がありそうです。
また Optional をインストールしないと、特定機能が使えなくなる というリスクは捨てきれません。。
おしまい。