平時會用到Node的時候就只有用Hexo寫部落格,自己對它是非常陌生的,但最近要寫React Native,然後就發現不得了的事情:Node.js版本過舊無法使用React Native -> MacOS版本過舊無法更新Node.js...窩的老天鵝呀。
於是我就先把MBA從Catalina直接上Big Sur,然後開始折騰如何更新Node.js。我不大記得當初如何在Mac上安裝Node.js的,但應該不是透過Homebrew,因為我無法透過它直接upgrade or uninstall,而用Homebrew直接安裝了新版後,在terminal用指令查Node.js版本依然是舊版。爬文測試後發現要手動移除再用Homebrew重新安裝:
shell
$ rm /usr/local/bin/node
$ rm /usr/local/bin/npm
$ rm /usr/local/bin/npx
$ rm /usr/local/lib/node_modules
$ brew install node
*因為會移除node_modules資料夾,所以我先把hexo-cli資料夾移出,更新完Node.js再丟回去。
好啦,OS更新了,Node.js也更新了,然後呢?然後我發現Hexo部署更新失敗...窩的老天鵝呀。😭
shell
FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
TypeError [ERR_INVALID_ARG_TYPE]: The "mode" argument must be integer. Received an instance of Object
去Hexo的官網看看troubleshooting在留言發現有相關討論,這竟然是因為Node.js版本太新...看來我只能降版:
shell
$ brew search node
==> Formulae
heroku/brew/heroku-node node-sass nodebrew
libbitcoin-node node@10 nodeenv
llnode node@12 nodenv
node node@14
node-build node_exporter
$ brew install node@12
降版安裝了node@12後,Homebrew提示此版本是「keg-only」,仔細看它的安裝路徑是在/usr/local/opt裡,Homebrew也不會為其建立system link。所以我得手動將node@12路徑加入環境變數,而hexo-cli移動到其根目錄下的/lib/node_modules後也必須手動加入環境變數:
shell
$ echo 'export PATH="/usr/local/opt/node@12/bin:$PATH"' >> ~/.zshrc
$ echo 'export PATH="/usr/local/opt/node@12/lib/node_modules/hexo-cli/bin:$PATH"' >> ~/.zshrc
搞定。
Ref.