Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

by kurone-kito
1 / 14

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 をインストールしないと、特定機能が使えなくなる というリスクは捨てきれません。。


おしまい。

kurone-kito
WebフロントエンドエンジニアなVTuberです。 SIerな職場でモダンWeb開発を夢見ながら、レガシーなWebフロントエンド開発をしています。
https://kit.black/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away