前提
数年前にiOSエンジニアをやっていたのでネイティブ系はなんとなく分かるが、
フロントエンドは何となく改修は出来るが、ちょっとよく分かってないわかろうとしてない系のバックエンドエンジニア。
現象
npmインストールすると下記エラーが出る。
node-sassの確認で失敗してるっぽい。
$ npm install
〜省略〜
npm ERR! code 1
npm ERR! path /Users/mitsuaki1229/Documents/01_REX/wos-front/node_modules/node-sass
npm ERR! command failed
npm ERR! command sh -c node scripts/build.js
npm ERR! Building: /Users/mitsuaki1229/.nodebrew/node/v16.5.0/bin/node /Users/mitsuaki1229/Documents/01_REX/wos-front/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
npm ERR! c++ '-DNODE_GYP_MODULE_NAME=libsass' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_DARWIN_USE_64_BIT_INODE=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DLIBSASS_VERSION="3.5.4"' -I/Users/mitsuaki1229/.node-gyp/16.5.0/include/node -I/Users/mitsuaki1229/.node-gyp/16.5.0/src -I/Users/mitsuaki1229/.node-gyp/16.5.0/deps/openssl/config -I/Users/mitsuaki1229/.node-gyp/16.5.0/deps/openssl/openssl/include -I/Users/mitsuaki1229/.node-gyp/16.5.0/deps/uv/include -I/Users/mitsuaki1229/.node-gyp/16.5.0/deps/zlib -I/Users/mitsuaki1229/.node-gyp/16.5.0/deps/v8/include -I../src/libsass/include -O3 -gdwarf-2 -mmacosx-version-min=10.7 -arch x86_64 -Wall -Wendif-labels -W -Wno-unused-parameter -std=c++11 -stdlib=libc++ -fno-strict-aliasing -MMD -MF ./Release/.deps/Release/obj.target/libsass/src/libsass/src/ast.o.d.raw -c -o Release/obj.target/libsass/src/libsass/src/ast.o ../src/libsass/src/ast.cpp
〜省略〜
原因
サイトを見ると、node-sassのバージョンに対応しているnodeのバージョンは決まってる様子。
$ grep node-sass package.json
"node-sass": "^4.13.1",
"node-sass-glob-importer": "^5.3.1",
$ node -v
v16.5.0
4.13.1
の場合、Node 13にする必要がありそう。
対応
バージョン管理出来そうなrenv的なツールがあったので入れ替え。
$ brew uninstall --force node
$ brew install nodebrew
nodeをv13.14.0に切り替え。
$ nodebrew ls-remote | grep v13 | tr -s ' ' '\n' | tail -n 1
v13.14.0
$ nodebrew install v13.14.0
$ nodebrew list
v13.14.0
v16.5.0
current: v16.5.0
$ nodebrew use v13.14.0
use v13.14.0
$ node -v
v13.14.0
確認
問題なく取得出来る事を確認。
$ npm install
〜省略〜
その他
フロントエンドはなんとなく苦手意識が強い。
ネイティブとかFlutterとかは割と好きなので読めるんだが、食わず嫌い的なもんなのかな。