行動すれば次の現実

テック中心の個人ブログ

yarnコマンドで発生したgyp ERR!の原因究明と対処方法

アプリケーションのnode.jsのバージョンを上げて、yarn installコマンドを実行したら以下のようなエラーが発生しました。

1 error generated.
make: *** [Release/obj.target/binding/src/binding.o] Error 1
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/my_name/my_app/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (node:events:390:28)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:290:12)
gyp ERR! System Darwin 20.6.0
gyp ERR! command "/usr/local/var/nodebrew/node/v16.13.1/bin/node" "/Users/my_name/my_app/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
gyp ERR! cwd /Users/my_name/my_app/node_modules/node-sass
gyp ERR! node -v v16.13.1

エラー内容を確認すると下の方にnode-sassと出力されています。

node-sassはpackage.jsonには記載のないライブラリでした。そのため、アプリケーション内で使用している何らかのライブラリがnode-sassに依存しているということがわかります。

原因究明の方法

yarn why [モジュール名]というコマンドで、間接的に依存しているライブラリを特定できます。

$ yarn why node-sass

[1/4] 🤔  Why do we have the module "node-sass"...?
[2/4] 🚚  Initialising dependency graph...
[3/4] 🔍  Finding dependency...
[4/4] 🚡  Calculating file sizes...
=> Found "node-sass@4.14.1"
info Reasons this module exists
   - "@rails#webpacker" depends on it
   - Hoisted from "@rails#webpacker#node-sass"
info Disk size without dependencies: "2.97MB"
info Disk size with unique dependencies: "11.13MB"
info Disk size with transitive dependencies: "23.48MB"
info Number of sha

"@rails#webpacker" depends on itという記載がありますので、@rails#webpackerで使用されているnode-sassのバージョンに問題があることがわかりました。

対処方法

@rails#webpackerで使用しているnode-sassのバージョンに問題があることがわかりましたので、本体となる@rails#webpackerのバージョンを上げてみようと思います。

package.jsonの記載を以下のように変更しました。

    "@rails/webpacker": "^5.4.3",

その後、yarn installを実行したら正常にインストールが完了しました。

めでたしめでたし。