node-sassをビルドするとき、頑張ってくれるgulpさんが急にエラー吐き出した。
昨日までビルドできていたのにどうして…。
以下、エラー解決までの方法の備忘録。
nodeエラー内容
ターミナルで「npm run XXXXX」と打ち込んで、吐き出されたのが以下のエラー。
(XXXXXはビルドするときの構築先ファイルパス)
TypeError: Cannot read properties of undefined (reading ‘apply’) at /usr/local/lib/node_modules/gulp/bin/gulp.js:129:20
at processTicksAndRejections
(node:internal/process/task_queues:78:11)
要は「gulpを再インストールして最新版入れろ」とおっしゃっているらしい。
調べてみたけどターミナルコマンド(mac)によるアンインストール/再インストールしか見つけられなかったので、イヤイヤながらコマンドを使う。(Winにもターミナルあるから一緒なのかな?)
rmにはトラウマしかないmacoです。
ちなみにエラー出たときのgulpのバージョンはこちら↓
$ gulp -v
[00:00:00] CLI version 3.9.1
[00:00:00] Local version 3.9.1
(ネットで調べた感じだと、この「version 3.9.1」でエラーになっている人が多い印象…)
グローバルのgulpアンインストール/再インストール
最新版のgulpに更新ではなく、本当に今入っていてエラーになっているgulpをアンインストールして真っ白状態にしてから、最新版のgulpをインストールするらしい。
$ npm rm –global gulp-cli
$ gulp -v
$ gulp -v$ npm install -g gulp-cli
ターミナルを使って何かをアンインストール/再インストールしたときは、一度ターミナルを閉じるらしい。
初心者なんで知らないけどー。
(なんなら再起動してもいいらしい)
立ち上げなおしたターミナルで、gulpのバージョンを調べる。
$ gulp -v
これで、自分の場合はgulpのバージョンが下記に更新されていた。
$ gulp -v
[00:00:00] CLI version 3.9.1
[00:00:00] Local version 4.0.1
※ちなみに初心者macoの場合、最初gulpのバージョンを調べても、CLI version しか表示されなかった。
原因はビルドしたいプロジェクトフォルダのあるディレクトリに移動していなかったから。
ビルドしたいフォルダまでcdで移動してから「$ gulp -v」したら、Local versionが表示されて一安心。
グローバルのgulp更新は本当に必要なのか?
職場の人曰く、「gulpはプロジェクトごとにローカルにいれておけば、グローバルにインストールする必要は本来ならばいらない」とのこと。
ほんと自分もその通りだと思う!!!
プロジェクトによってgulpに記述された中身が違うから、別々にしておかないといけない(ハズ)!
だから、nodeがグローバルのgulpを再インストールしろ、とごねてきて、頭ひねった。
初心者でもローカルのgulpは、書き換えたらそのプロジェクトをビルドできなくなるのは簡単に想像ついたので、絶対にグローバル再インストールで上書きしないようにバックアップとってから、グローバルのgulpをアンインストール/再インストール。
結果として、ローカルのgulpは上書きされなかった。
そして、グローバルのgulpを更新したことでエラーがでなくなり、通常通りビルドできるようになったからよかったけど……。
うーん。
初心者にはよくわからない。
ついでにnodeのバージョン変更しておいた
時間あるとき…いや、時間なんてない。
毎日タスクに追われて、分からないことを調べて、gitや勉強することが多すぎて、余った時間なんて1秒もない。
ついでにやれるときが、やる時だ。
今回のgulp再インストールと一緒に、nodeのバージョンをダウングレード/アップグレードを簡単にできるようにしておいた。
プロジェクトによっては、最新版のnodeだと色々事情があって対応していないことも多々ある。
よって、プロジェクトによってnodeのバージョンを臨機応変にダウングレード/アップグレードできるようにしておきたい。

Nodeのバージョン管理nvmのインストールとバージョン切り替え方法についてまとめておいた。