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版本:

$ 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開發者〈這篇回覆〉是正常的。