メモ。
エラーメッセージを読んで理解できればすぐわかるけど、 理解が浅いため「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 rebuild
や npm 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