问题背景
今天在使用 Vercel CLI 部署 Hexo 博客时,遇到了一个 Node.js 版本兼容性问题:
1 | Error: Node.js Version "18.x" is discontinued and must be upgraded. Please set Node.js Version to 22.x in your Project Settings to use Node.js 22. |
这说明 Vercel 已经停止支持 Node.js 18.x 版本,需要升级到 22.x。
问题分析
Vercel 平台会定期更新其支持的 Node.js 版本,当某个版本被标记为 “discontinued”(已停止支持)时,就必须升级到更新的版本。这是一个常见的云平台维护操作。
解决方案
方案一:通过 Vercel Dashboard(推荐)
这是最直接和可靠的解决方法:
- 访问 Vercel 项目 Dashboard:https://vercel.com/gggwbs-projects/gggwb-github-io
- 进入项目 Settings(设置)
- 找到 Build & Development Settings(构建和开发设置)
- 将 Node.js Version 从 “18.x” 改为 “22.x”
- 保存设置并重新部署
方案二:通过配置文件
虽然主要通过 Dashboard 设置,但也可以在项目中添加相关配置文件作为最佳实践:
1. 创建 .nvmrc 文件
在项目根目录创建 .nvmrc 文件指定 Node.js 版本:
1 | echo "22" > .nvmrc |
2. 更新 vercel.json 配置
在 vercel.json 中添加 Node.js 环境变量:
1 | { |
操作步骤
1. 检查当前项目
1 | cd /Users/gggwb/Documents/gggwb.github.io |
2. 更新配置文件
1 | # 创建 .nvmrc 文件 |
3. 提交更改
1 | git add .nvmrc vercel.json |
4. 重新部署
1 | vercel --prod |
遇到的额外问题:Hexo 主题兼容性
在 Node.js 版本升级后,还遇到了 Hexo 7.0.0 主题模板的兼容性问题。
问题现象
执行 hexo g 命令时出现错误:
1 | TypeError: /Users/gggwb/Documents/gggwb.github.io/themes/pure/layout/_partial/post/category.ejs:4 |
以及类似的 list_tags 函数错误:
1 | TypeError: /Users/gggwb/Documents/gggwb.github.io/themes/pure/layout/_partial/post/tag.ejs:4 |
问题分析
这是 Hexo 7.0.0 版本与 Node.js 22.x 升级后的兼容性问题:
- API 参数格式要求:
list_categories和list_tags辅助函数在 Node.js 22.x 环境下对参数格式要求更严格 - 错误的参数格式:将参数包装在对象中会导致显示全站所有的分类和标签,而不是当前文章的分类和标签
解决方案
重要提示:正确的格式是保持原有的参数格式,即将文章的分类/标签作为第一个参数,选项作为第二个参数。
1. 修复分类模板
文件位置:themes/pure/layout/_partial/post/category.ejs
1 | <!-- 正确的格式(保持原有格式) --> |
2. 修复标签模板
文件位置:themes/pure/layout/_partial/post/tag.ejs
1 | <!-- 正确的格式(保持原有格式) --> |
验证修复结果
1 | hexo g |
修复后应该能看到正常的生成输出:
1 | INFO Validating config |
验证结果
部署完成后,可以通过以下方式验证:
1. 检查部署状态
1 | vercel ls |
2. 测试网站访问
1 | curl -I https://blog.gwbiao.eu.org |
正常情况下应该返回 HTTP/2 200 状态码。
3. 查看部署日志
通过 Vercel Dashboard 查看部署日志,确认没有版本错误。
4. 验证 Hexo 生成
确保本地 Hexo 生成没有错误:
1 | hexo clean && hexo g |
关键要点
- 定期关注版本更新:云平台会定期更新支持的运行时版本,需要及时跟进。
- 配置文件最佳实践:虽然主要通过 Dashboard 设置,但在项目中维护配置文件是个好习惯。
- 主题兼容性检查:Node.js 版本升级后,要检查 Hexo 主题模板的兼容性,特别是辅助函数的参数格式。
- 测试验证:升级后一定要测试网站功能是否正常,包括本地生成和线上部署。
- 备份配置:在修改配置前,建议备份原有的配置文件。
最终结果
✅ 问题成功解决
- Node.js 版本从 18.x 升级到 22.x
- 修复了 Hexo 7.0.0 主题模板兼容性问题
- 网站正常部署和访问
- 自定义域名
https://blog.gwbiao.eu.org工作正常 - HTTP 状态码:200 OK
- Hexo 本地生成正常:18 个文件成功生成
总结
Vercel 的 Node.js 版本升级是一个常规的维护操作,但可能会带来一系列兼容性问题。通过 Dashboard 设置是最简单可靠的方法,同时配合项目中的配置文件可以确保项目的可维护性。
本次升级遇到的问题链:
- Vercel 平台 Node.js 版本过期 → 需要升级到 22.x
- Node.js 22.x 严格检查 → Hexo 主题模板 API 兼容性问题
- 主题辅助函数参数格式变化 → 错误修复导致显示全站标签和分类
- 重新分析问题 → 保持原有参数格式,修复显示错误
解决思路:
- 逐个排查错误信息
- 理解版本升级带来的 API 变化
- 重要:测试修复后的效果,确保没有引入新问题
- 全面测试验证修复结果,包括标签和分类的显示
经验教训:
- 在解决兼容性问题时,不要盲目修改参数格式
- 修复后一定要验证实际效果,避免引入新问题
- 保持原有格式往往是最好的解决方案
及时处理这类问题可以保证网站的稳定运行,同时也能积累版本升级的经验。
参考链接: