Hexo 3.2.2升級到3.4.4
這次升級Hexo主因是3.2.2版每次執行hexo s
或hexo g
都會卡在INFO Start processing
超過3分鐘以上(甚至更久),升級到3.4.4版後明顯快太多了,也有可能是其他因素造成,就趁這次機會一起升級吧。如果遇到很多升級上的問題,花很多時間都解決不了,建議全部砍掉重裝最快,Hexo資料夾(尤其是文章、圖片、附件檔案)有定時備份都不是問題。
Hexo我個人一直是裝在macOS,維護和備份比Windows簡單。以下是在macOS環境升級過程,除了作業系統差異,其他指令、訊息等應該都是相同的。
檢查npm版本:
$ npm -v
3.10.4
升級npm版本:
sudo npm install -g npm
執行安裝完後,執行npm -v
有一些錯誤,暫時不理:
$ npm -v
/Users/carlos/.nvm/versions/node/v0.12.13/lib/node_modules/npm/lib/utils/unsupported.js:28
console.error(`a bug known to break npm. Please update to at least ${r
^
SyntaxError: Unexpected token ILLEGAL
at exports.runInThisContext (vm.js:73:16)
at Module._compile (module.js:443:25)
at Object.Module._extensions..js (module.js:478:10)
at Module.load (module.js:355:32)
at Function.Module._load (module.js:310:12)
at Module.require (module.js:365:17)
at require (module.js:384:17)
at /Users/carlos/.nvm/versions/node/v0.12.13/lib/node_modules/npm/bin/npm-cli.js:19:21
at Object.<anonymous> (/Users/carlos/.nvm/versions/node/v0.12.13/lib/node_modules/npm/bin/npm-cli.js:92:3)
at Module._compile (module.js:460:26)
參考〈Node.js安裝與版本切換教學(for MAC)〉這篇來安裝Node.js新版本。檢查nvm版本有哪些可以安裝:
$ nvm ls-remote
.
.
.
v0.12.11
v0.12.12
-> v0.12.13
v0.12.14
v0.12.15
v0.12.16
.
.
.
v8.9.0
v8.9.1
v8.9.2
v8.9.3
v8.9.4
v9.0.0
v9.1.0
v9.2.0
v9.2.1
v9.3.0
v9.4.0
參考Node.js官網的版本來安裝,目前為8.9.4 LTS和9.4.0 Current兩種,我個人選擇v8.9.4:
$ nvm install v8.9.4
裝完後輸入hexo
找不到指令,暫時不理:
$ hexo
-bash: hexo: command not found
前面提到npm install -g npm
有錯誤,參考〈How can I update Node.js and npm to the next versions?〉來安裝修正:
$ curl https://www.npmjs.com/install.sh | sh
跑完最後會顯示一個It worked
訊息。
列出nvm已安裝版本:
$ nvm ls
v0.12.13
-> v8.9.4
system
default -> 0.12.13 (-> v0.12.13)
node -> stable (-> v8.9.4) (default)
stable -> 8.9 (-> v8.9.4) (default)
iojs -> N/A (default)
nvm切換使用v8.9.4:
$ nvm use 8.9.4
nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.4` to unset it.
接著依照提示輸入:
$ nvm use --delete-prefix v8.9.4
設定nvm預設要使用的版本:
$ nvm alias default v8.9.4
default -> v8.9.4
重開終端機會出現該訊息:
nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.4 --silent` to unset it.
參考nvm開發者〈這篇回覆〉,把v8.9.4移除再安裝:
$ nvm uninstall v8.9.4 && nvm install v8.9.4
Uninstalled node v8.9.4
Downloading https://nodejs.org/dist/v8.9.4/node-v8.9.4-darwin-x64.tar.gz...
######################################################################## 100.0%
Now using node v8.9.4 (npm v5.6.0)
之後重開或開新的終端機應該不會出現了。
重裝Hexo:
$ npm install -g hexo
檢查Node.js版本:
$ node -v
v8.9.4
檢查Hexo是否可以執行:
$ hexo
Error: The module '/Users/carlos/Documents/hexo/node_modules/dtrace-provider/build/Release/DTraceProviderBindings.node'
was compiled against a different Node.js version using
NODE_MODULE_VERSION 14. This version of Node.js requires
NODE_MODULE_VERSION 57. Please try re-compiling or re-installing
.
.
.
出現很多錯誤,但Hexo功能可以執行。
參考〈這篇回覆〉重新安裝Package:
$ rm -rf node_modules && npm install
檢查Hexo版本:
$ hexo version
(node:70752) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.
hexo: 3.4.4
hexo-cli: 1.0.4
os: Darwin 17.3.0 darwin x64
http_parser: 2.7.0
node: 8.9.4
v8: 6.1.534.50
uv: 1.15.0
zlib: 1.2.11
ares: 1.10.1-DEV
modules: 57
nghttp2: 1.25.0
openssl: 1.0.2n
icu: 59.1
unicode: 9.0
cldr: 31.0.1
tz: 2017b
現在執行Hexo不會有錯誤訊息了。
至於此訊息:
(node:70752) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.
根據Hexo開發者〈這篇回覆〉是正常的。