Hexo v3.8からv5.4へのバージョンアップがとても簡単だった話

動機

このブログを2年ぶりに再開するにあたって、deployしようと思ったら
TypeError [ERR_INVALID_ARG_TYPE]: The "mode" argument must be integer
のエラーが発生。
どうもnodeがv14以降だと発生するらしく、v13に戻せば解消するそうだが、Hexo v5.0.0でも修正された模様

https://github.com/hexojs/hexo/issues/4263

ということで、せっかくなら現行最新にあげようと思ったが、いきなりメジャーバージョン2つあげることになるので慎重に。

結論

特に問題なかった

手順

package.jsonの更新

Hexoのリリースノートでbreaking changesを拾い読みする限り、特に問題はなさそうだった。
ただし、git-deployerやその他依存ライブラリもアップデートしないといけないのでnpm-check-updatesでまとめて更新する。

リリース状況チェックしてpackage-jsonをまとめて最新版へ書き換えるのにnpm-check-updatesを使う。
大体^(キャレット)がついていてマイナーバージョンアップしかしてくれないが、手動で書き換えるのも手間なので。
ncuがショートハンド。

ncu で更新があるパッケージを表示、ncu -uでpackage.jsonを更新する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"hexo": {
"version": "3.8.0"
},
"dependencies": {
"hexo": "^3.8.0",
"hexo-beautify": "^1.0.2",
"hexo-codepen-v2": "^0.2.3",
"hexo-deployer-git": "^1.0.0",
"hexo-fontawesome": "^1.1.1",
"hexo-generator-amp": "^3.0.19",
"hexo-generator-archive": "^0.1.5",
"hexo-generator-category": "^0.1.3",
"hexo-generator-index": "^0.2.1",
"hexo-generator-seo-friendly-sitemap": "0.0.25",
"hexo-generator-tag": "^0.2.0",
"hexo-include-markdown": "^1.0.2",
"hexo-renderer-ejs": "^0.3.1",
"hexo-renderer-marked": "^0.3.2",
"hexo-renderer-stylus": "^0.3.3",
"hexo-server": "^0.3.3"
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"hexo": {
"version": "5.4.0"
},
"dependencies": {
"hexo": "^5.4.0",
"hexo-beautify": "^1.0.3",
"hexo-codepen-v2": "^0.2.3",
"hexo-deployer-git": "^3.0.0",
"hexo-fontawesome": "^2.2.1",
"hexo-generator-amp": "^3.2.0",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-category": "^1.0.0",
"hexo-generator-index": "^2.0.0",
"hexo-generator-seo-friendly-sitemap": "0.2.1",
"hexo-generator-tag": "^1.0.0",
"hexo-include-markdown": "^1.0.2",
"hexo-renderer-ejs": "^1.0.0",
"hexo-renderer-marked": "^4.0.0",
"hexo-renderer-stylus": "^2.0.1",
"hexo-server": "^2.0.0"
}
}

に書き換わった。

インストール〜deploy

一応きれいにしてからインストール

1
2
$ rm -rf ./node_modules
npm -i

Hexoで静的ファイルを生成してからdeploy

1
2
hexo generate -f
hexo deploy

なお、どっかのタイミングでcss/jsが空で出力されたせいかhexo generateだけだとcss/jsが反映されなかったので-fオプション付けて強制上書きしている