【Rails】Webpackerと互換性のないNode.jsがインストールされているとエラー

2021年5月20日 12:34

事象

昔作ったRailsアプリを久しぶりに修正しデプロイしようとしたところ、以下のエラーが出力されました。

# 実行コマンド
Running $HOME/.rbenv/bin/rbenv exec bundle exec rake assets:precompile
# エラー内容
error @rails/webpacker@4.3.0: The engine "node" is incompatible with this module. Expected version ">=8.16.0". Got "6.17.1"

エンジン "node" はこのモジュールと互換性がありません。期待されるバージョンは">=8.16.0"。"6.17.1 "でした。

原因

Railsのバージョンは6.0.3なのでWebpackerが含まれています。WebpackerはNode.jsが必要ですが、本番環境にインストールされているNode.jsのバージョンが古かったためです(エラーメッセージの通り)。

$ node -v
6.17.1

Prerequisites

  • Ruby 2.4+
  • Rails 5.2+
  • Node.js 12+ || 14+
  • Yarn 1.x+ || 2.x+

Webpackerの前提条件を見ると、Node.jsはバージョン12以上か14以上となっています。エラーメッセージには>=8.16.0と書かれているのでどっちを信用すべきなのかわかりませんが、最新バージョンにしておけば間違いないと思います。

対処

Node.jsを最新バージョンにするのですが、本番環境ではnvmnでNode.jsのバージョン管理を行っていなかったので、これを機にnを導入してみました。

まず、インストールされているNode.jsを削除します。

# npm uninstall -g node
or
# yarn global remove node

次にnをインストールします。

# npm install -g n

現在の安定バージョンと最新バージョンを確認します。

# n --stable
14.17.0
# n --latest
16.1.0

今回は安定バージョンをインストールします。

# n stable

インストールした安定バージョンを適用します。今回は安定バージョンである14.17.0しかインストールしていないのでひとつしか表示されていませんが、複数バージョンをインストールしている場合は矢印キーの上下でバージョンを選択し、Enterキーを押すことで選択できます。

# n

  ο node/14.17.0

Use up/down arrow keys to select a version, return key to install, d to delete, q to quit

Node.jsのバージョンを確認します。

# node -v
14.17.0

関連記事

【Rails】Railsアプリのデバッグ《マルチデバイス篇》
# はじめに 近年のWebアプリはレスポンシブ対応が当たり前になっています。最低でもPCとスマートフォンに対応したデザイン、ときにはその中間のタブレットに対応したデザインなんかも作成する必要があります。 Webアプリの開発はPCを使って行う [...]
2021年5月23日 13:02
【Rails】Railsアプリのデバッグ《Better Errors篇》
# はじめに Railsアプリの開発中になんらかのエラーが発生すると、デフォルトでは以下のような画面が表示されます(画像をクリックすると拡大します)。 <a class="gallery" data-group="gallery" href [...]
2021年5月22日 19:42
【Rails】Railsアプリのデバッグ《byebug篇》
# はじめに Ruby on Railsに限りませんが、アプリの開発中にはエラーは付き物です。なにかしらのエラーが発生したときに、エラーの原因を特定しエラー箇所を修正することをデバッグと言います。Railsではデバッグの手助けとなる機能があらかじ [...]
2021年5月22日 15:30
【Rails】レンダリング(renderメソッド)でアンカー指定を行う
# はじめに 通常、Railsでアンカー付きのリクエストを発生させるには`redirect_to`を使います。 ```rb redirect_to root_path(anchor: 'target') ``` では、`rende [...]
2021年5月20日 10:47
【Rails】Bundler 2.2.x以降は開発者が適切なプラットフォームを追加する必要がある
# 事象 昔作ったRailsアプリを久しぶりに修正しデプロイしようとしたところ、以下のエラーが出力されました。 ```bash # 実行コマンド Running $HOME/.rbenv/bin/rbenv exec bundle ch [...]
2021年5月18日 16:18