Posted at

NodeJS v12 で AWS Amplify コマンドのインストール時、エラーが出る現象をどうにかする

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-fsqascoltatori あたりは最新でも死ぬので、この辺の古い依存関係に根本的な原因がありそうです。

また Optional をインストールしないと、特定機能が使えなくなる というリスクは捨てきれません。。


おしまい。