WSL2(Ubuntu 20.04) + nodenv でsharp関連の symbol lookup errorが出る
同じ状況の人の助けになれば幸いです。
事象
Gatsbyのプロジェクトを作る時に以下のコマンドの流れで作成&起動しようとしたところ...
$ nodenv install 16.15.1
$ nodenv global 16.15.1
$ npx gatsby new hogehoge
$ cd hogehoge
$ yarn develop
/home/watashi/.nodenv/versions/16.15.1/bin/node: symbol lookup error: /project/hogehoge/node_modules/sharp/build/Release/sharp-linux-x64.node: undefined symbol: vips_fail_on_get_type
error Command failed with exit code 127.
というエラーが出て動きませんでした。
解決方法
私の開発環境はUbuntu 20.04 on WSL2なのですが、 Ubuntu 22.04にアップグレードしたところ直りました。
アップグレード方法はこちらの記事を参考にさせていただきました。
【WSL2】Ubuntu 20.04.4 LTS を 22.04 LTS へアップグレードした
もし環境が日本語になっているのであれば、英語にしてから実行するのをオススメします(画面が崩れるので)
$ export LC_ALL="en_US.UTF-8"
$ export LANG="en_US.UTF-8"
解決までの流れ
1. GatsbyのリポジトリでIssueを探す
gatsby-source-contentful: undefined symbol: vips_fail_on_get_type · Issue #35524 · gatsbyjs/gatsby
これが見つかりますが、特に複数バージョンのsharpが入っているということもありません。
yarn why sharp
というコマンドでこれはチェックできます。
$ yarn why sharp
yarn why v1.22.18
[1/4] Why do we have the module "sharp"...?
[2/4] Initialising dependency graph...
[3/4] Finding dependency...
[4/4] Calculating file sizes...
=> Found "sharp@0.30.7"
info Reasons this module exists
- "gatsby-plugin-manifest" depends on it
- Hoisted from "gatsby-plugin-manifest#sharp"
- Hoisted from "gatsby-plugin-sharp#sharp"
- Hoisted from "gatsby-transformer-sharp#sharp"
- Hoisted from "gatsby#gatsby-sharp#sharp"
info Disk size without dependencies: "3.02MB"
info Disk size with unique dependencies: "4.04MB"
info Disk size with transitive dependencies: "5.57MB"
info Number of shared dependencies: 30
Done in 0.77s.
0.30.7
しか入っていませんね。
2. とりあえずのnode_moduleのクリーンインストール
$ rm -rf node_modules; rm package-lock.json; rm yarn.lock; yarn cache clean; yarn install
$ yarn develop
変わらず。
2. nodeのバージョン変えてみる
$ nodenv install 18.4.0
$ nodenv local 18.4.0
$ yarn develop
変わらず。
3. nodeのバージョンをsystem標準に
$ nodenv local system
$ node --version # v18.2.0
$ yarn develop
動く!なんでやねん。18.2.0なら動く...?
$ nodenv local 18.2.0
$ yarn develop
動かない...なんでやねん...
nodenvが悪さしてるのかなとググってみたんですが特にそれっぽい情報にはたどり着けず。
4. macではどうか?
macOSで冒頭のコマンドで環境を作ったらすんなり動きました。ということはWSL2かUbuntuの問題ですね。
5. Ubuntu 20.04の問題だよという情報
その後なんやかんやググっていたら
Ubuntu 20.04の問題なので、22.04にアップグレードしたら直るよ
-- Symbol lookup error on linux · Issue #2015 · Automattic/node-canvas
という情報が見つかりました。