Hexo 3.2.2升級到3.4.4

這次升級Hexo主因是3.2.2版每次執行hexo shexo g都會卡在INFO Start processing超過3分鐘以上(甚至更久),升級到3.4.4版後明顯快太多了,也有可能是其他因素造成,就趁這次機會一起升級吧。如果遇到很多升級上的問題,花很多時間都解決不了,建議全部砍掉重裝最快,Hexo資料夾(尤其是文章、圖片、附件檔案)有定時備份都不是問題。

Hexo我個人一直是裝在macOS,維護和備份比Windows簡單。以下是在macOS環境升級過程,除了作業系統差異,其他指令、訊息等應該都是相同的。

檢查npm版本:

1
2
$ npm -v
3.10.4

升級npm版本:

1
sudo npm install -g npm

執行安裝完後,執行npm -v有一些錯誤,暫時不理:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ 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版本有哪些可以安裝:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$ 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:

1
$ nvm install v8.9.4

裝完後輸入hexo找不到指令,暫時不理:

1
2
$ hexo
-bash: hexo: command not found

前面提到npm install -g npm有錯誤,參考〈How can I update Node.js and npm to the next versions?〉來安裝修正:

1
$ curl https://www.npmjs.com/install.sh | sh

跑完最後會顯示一個It worked訊息。

列出nvm已安裝版本:

1
2
3
4
5
6
7
8
$ 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:

1
2
3
$ 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.

接著依照提示輸入:

1
$ nvm use --delete-prefix v8.9.4

設定nvm預設要使用的版本:

1
2
$ nvm alias default v8.9.4
default -> v8.9.4

重開終端機會出現該訊息:

1
2
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移除再安裝:

1
2
3
4
5
$ 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:

1
$ npm install -g hexo

檢查Node.js版本:

1
2
$ node -v
v8.9.4

檢查Hexo是否可以執行:

1
2
3
4
5
6
7
8
$ 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:

1
$ rm -rf node_modules && npm install

檢查Hexo版本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$ 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不會有錯誤訊息了。

至於此訊息:

1
(node:70752) [DEP0061] DeprecationWarning: fs.SyncWriteStream is deprecated.

根據Hexo開發者〈這篇回覆〉是正常的。