NODE_MODULE_VERSION が違うといわれて npm run dev 等できない時の対策


メモ。
エラーメッセージを読んで理解できればすぐわかるけど、 理解が浅いため「Node.jsのバージョンがNODE_MODULE_VERSIONと関連している」と思っておらず、エラーを読んですぐ対策にたどり着かなかった。(Node.jsとNODE_MODULE_VERSIONを別で用意する必要があると思っていたなど)

エラー:

Error: The module '/BOKU/NO/APPLICATION/node_modules/scrypt/build/Release/scrypt.node'
was compiled against a different Node.js version using NODE_MODULE_VERSION 64. This version of Node.js requires NODE_MODULE_VERSION 57. Please try re-compiling or re-installing the module (for instance, using `npm rebuild` or `npm install`).

なお、 Please try re-compiling or re-installing the module (for instance, using npm rebuild or npm install). と書いてある通り、 僕のプロジェクトを npm rebuildnpm install しただけではだめだった。(後から読んだら、もしかしたらscryptをrebuildしろという意味だったかもしれないと気が付いた。主語が抜けているせいでよく分からない。)

原因

  • エラーが出たときに使っていたNode.jsのバージョンは10.0であった。
  • 使用している scrypt で利用すべき NODE_MODULE_VERSION が 57 であった。
  • Node.js 10.0 の NODE_MODULE_VERSION は 64 であった。
  • そのため、 NODE_MODULE_VERSION のバージョンが異なり、上記に書いてあるエラーがでた。

対策(もう一度Buildする方)

Electronを使っている場合は、プロジェクトのフォルダで以下を実行すればよい。

$ ./node_modules/.bin/electron-rebuild

1度やって治らなければ、 ./node_modules 以下を一度削除してからもう一度npm installなりyarnなりして、rebuildすれば治る(僕の場合は)

対策(Node.jsのバージョン変える方)

Node.jsのバージョンを変更すればよい。(変更後、node_modules内を削除した方がよいみたい)

具体的には、 Node.jsのリリース一覧 で、 NODE_MODULE_VERSION が 57のNode.jsを選べば良い。
(別のバージョンを指定されている場合は、その数字にあったものを選べば良い)

以下はnodebrewを利用しているときの例:


$ nodebrew list
v10.0.0

current: v10.0.0

 15:09:52  keisuke@MBP15-YKEISUKE  ~  ♦️ 2.3.3  🐍 2.7.14  ⬡ v10.0.0 
$ nodebrew install 8.12.0
Fetching: https://nodejs.org/dist/v8.12.0/node-v8.12.0-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

 15:15:42  ✘  keisuke@MBP15-YKEISUKE  ~  ♦️ 2.3.3  🐍 2.7.14  ⬡ v10.0.0 
$ nodebrew list
v8.12.0
v10.0.0

current: v10.0.0

 15:15:45  keisuke@MBP15-YKEISUKE  ~  ♦️ 2.3.3  🐍 2.7.14  ⬡ v10.0.0 
$ nodebrew use 8.12.0
use v8.12.0

 15:15:59  keisuke@MBP15-YKEISUKE  ~  ♦️ 2.3.3  🐍 2.7.14  ⬡ v8.12.0 
$ node --version
v8.12.0