准备工作

备份源文件

版本升级以前一定要先备份源文件,防止后面一些插件升级出现bug

npm速度太慢

如果npm install速度过慢,可安装cnpm淘宝镜像替代:

1
npm install -g cnpm --registry=https://registry.npm.taobao.org

安装好了就可以使用cnpm来替代npm进行依赖的下载了:

1
cnpm install

版本升级

先查看hexo版本:

1
hexo version

升级命令如下:

1
2
3
npm i hexo-cli -g
npm update
hexo version

注意:如果升级后报错,大概率是因为安装的某个插件的问题(如hexo升级5.4后,hexo-cake-moon-menu插件导致报错,就需卸载此插件,当然也有可能是主题和这个插件不兼容),这时就需要排查是哪个插件的问题,最直接的方法就是重新初始化hexo,所以说升级前备份源文件是及其重要的。

插件升级

上面升级命令不够正确(插件没有升级,不过插件升级可能会导致bug,要事先备份好源文件),继续往下操作:

检查插件是否有升级

1
2
npm install -g npm-check
npm-check

升级系统中的插件

1
2
npm install -g npm-upgrade
npm-upgrade

更新全局包

1
npm update -g

更新生产环境依赖包

1
npm update --save

再次查看版本号

1
hexo version

出现的问题

升级插件后报错:

1
hexo TypeError [ERR_INVALID_URL]: Invalid URL

主要是因为某些插件升级后有bug,需要退版本,解决方法如下:

  • 删除node_modules文件夹

  • 把稳定版本的package.jsonpackage-lock.json复制到当前文件夹并覆盖

  • npm install

hexo 5.0升级

升级方法

2020.7.29 To upgrade to Hexo v5, change the following line in your package.json,

1
2
3
4
package.json

- "hexo": "^4.2.1",
+ "hexo": "^5.0.0",

然后

1
2
3
npm i hexo-cli -g
npm update
hexo version

存在的问题

升级hexo 5.0后,hexo s后,提示:

1
2
INFO  Validating config
WARN Deprecated config detected: "use_date_for_updated" is deprecated, please use "updated_option" instead. See https://hexo.io/docs/configuration for more details.

解决方法

站点配置文件_config.yml

1
2
- use_date_for_updated: false
+ updated_option: mtime

1
2
3
4
5
Hexo 4.0.0 提供的 use_date_for_updated 配置项现已被 updated_option 替代。

use_date_for_updated: true 现在等价于 updated_option: 'date'
use_date_for_updated: false 现在等价于 updated_option: 'mtime'
//如果从hexo 4.0升级到5.0,这里应当是updated_option: mtime(不要引号)

hexo 6.2升级

出现问题:Asset render failed: %s css/style.css #4970

解决方法:

node16 npm8
修改 package.json:

https://github.com/volantis-x/demo/blob/5063cebe42975af229aea88fbcc0e25fa1cc3048/package.json#L14-L19

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server"
},
"hexo": {
"version": "6.2.0"
},
+ "overrides": {
+ "nib": {
+ "stylus": "0.54.8"
+ },
+ "glob": "7.2.0"
+ },
"dependencies": {
"hexo": "^6.0.0",
"hexo-abbrlink": "^2.2.1",
"hexo-deployer-git": "^3.0.0",
"hexo-filter-nofollow": "^2.0.2",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-category": "^1.0.0",
"hexo-generator-index": "^2.0.0",
"hexo-generator-searchdb": "^1.4.0",
"hexo-generator-sitemap": "^2.2.0",
"hexo-generator-tag": "^1.0.0",
"hexo-renderer-ejs": "^2.0.0",
"hexo-renderer-marked": "^5.0.0",
"hexo-renderer-pug": "^2.0.0",
"hexo-renderer-stylus": "^2.0.1",
"hexo-server": "^3.0.0",
"hexo-theme-butterfly": "^4.1.0",
"hexo-theme-landscape": "^0.0.3",
"hexo-wordcount": "^6.0.1"
}
}

删除 package-lock.json node_modules
然后 执行安装命令:

1
npm i

(安装glob只是执行了npm i,并没有什么用,如果安装了建议马上卸载 npm un glob)

#4968

isaacs/node-glob#471

参考链接