Hexo 是一个基于 Nodejs 的静态网站生成器。它提供了强大的 API 来集成现有的 npm 包用于 Web 开发,并以编程方式将特定内容插入文章。
这是我们迄今为止最大的发布版本,包含大量新功能、性能改进和错误修复。根据我们的基准测试(我们在每个 pull request 中运行以检测回归),Hexo 5 处理了 500 篇文章,耗时 16 秒,而 4.2.0 在同一时间处理了 300 篇文章。Hexo 现在需要 Nodejs 10+,Nodejs 自 2019 年 12 月 31 日起不再支持版本 8;尽管 Nodejs 10.x 仍然受支持,但由于它将在不到一年内(2021 年 4 月)被弃用,我们建议使用 Nodejs 12+。
请参考我们的 安装指南 来安装 Hexo。
要升级到 Hexo v5,请更改 `package.json` 中的以下行:
- "hexo": "^4.2.1", |
重大变更
重构(external_link): 在加载配置期间迁移配置 @SukkaW #4414 #4371
- 请参阅 编写 部分以了解新的选项(从 v4 版本开始引入)。
_config.yml # Deprecated
external_link: true|false
# New option
external_link:
enable: true|false
# Deprecated
use_date_for_updated: true
# New option
# https://hexo.node.org.cn/docs/configuration#Date-Time-format
updated_option: date- 如果您检查 `external_link` 的 真值,由于它现在自动转换为对象,它将始终为真值。
<% if (config.external_link) { %>
- 如果您希望保持与以前版本的向后兼容性。
<% if ((typeof config.external_link === 'boolean' && config.external_link === true) || (typeof config.external_link === 'object' && config.external_link.enable === true)) { %>
feat: 引入 config.updated_option @SukkaW #4278
- 这对于希望仅在文章的前置内容中设置时显示 `Updated:` 的主题非常有用。
feat(open_graph): 从前置内容中删除 `keywords` 选项 @curbengh #4174
- 搜索引擎不再支持 `keywords`。
fix: 使用文章的前置内容覆盖网站的永久链接 @SukkaW #4359
- 用户配置
_config.yml permalink: :year/:month/:day/:title/
- 前置内容
source/foo-bar.md
title: foo bar
permalink: breaking-news/- 该帖子将可在 `http://yourhexo.com/breaking-news/` 上访问。
- 请注意,永久链接必须以 `。html` 或 `/` 结尾。
permalink: :year/:month/:day/:title/ # default
# or
permalink: :year/:month/:day/:title.html-
- Lodash `_` 在 Hexo API 中不再可用。
// Dropped
<% const arrayB = _.uniq(arrayA) %> chore/ci: 删除 Node.js 8 并添加 Node.js 14 @SukkaW #4255
- Node 8 已于 2019 年 12 月 31 日 达到生命周期结束。
重构: 从主题配置中移除站点配置 @SukkaW #4145
- 以前 `hexo.theme.config` 会合并到 `hexo.config` 中,现在它们已分离,以避免配置中的潜在冲突。
新功能
feat(post_link): 找不到帖子时的更佳错误信息 #4426
- 如果文件名不正确,现在错误信息更加清晰。
跳过未发布帖子的资产,如果存在则删除它们 @DaemondShu #3489
- 如果存在未发布的帖子。
title: Still a draft....
published: false- 该帖子及其资产将不会生成到 `public/` 文件夹中。
feat(extend/injector): 引入新的 extend Injector @SukkaW #4049
- 请参考 API 文档 以了解使用方法。
feat: 添加 prism 高亮支持 @SukkaW #4119
- 请参考 文档 以了解使用方法。
feat(tagcloud): 新选项 class 和 level @stevenjoezhang #4370
- 能够为 CSS 样式添加类名。
feat(post_permalink): 为帖子永久链接添加 `:second` 属性选项 @kkocdko #4185
- 示例
permalink: :year/:month/:day/:hour/:minute/:second/:title.html
- 请参阅 永久链接 以了解可用的属性。
feat(youtube_tag): 添加 cookie 选项 @curbengh #4155
- 禁用后,cookie 不会在 youtube 视频嵌入中设置/发送。
feat(youtube_tag): 支持播放列表 @SukkaW #4139
- 能够嵌入播放列表。
feat(load_theme_config): 支持备用主题配置 @SukkaW #4120
- 主题可以在名为 `_config.[name].yml` 的文件中进行配置,例如,`_config.landscape.yml` 用于 hexo-theme-landscape。
- 将该文件放置在根目录中,与当前的 `_config.yml` 相同。
- 请参阅 文档 以了解配置优先级。
feat(feed_tag): 支持解析 config.feed @curbengh #4029
- 与 hexo-generator-feed 的更好集成。
feat(tag): 添加 unregister() 方法 @SukkaW #4046
- 这意味着您现在可以注销现有的 标签插件,并用您自己的同名插件替换它。
feat(load_config): 支持 node_modules 中的 theme_dir @SukkaW #4112
fix(list_tags): 为每个元素自定义类 @noraj #4059
- 为每个元素 `<ul>`、`<li>`、`<a>`、`<span>` 自定义类名,用于 list_tags 插件。
性能
- perf(tag): 渲染优化 @SukkaW #4418
- perf(external_link): 更快的正则表达式和条件简写 @SukkaW #4436
- perf(external_link): 优化正则表达式 @SukkaW #4008
- perf(filter): 简写语法 @SukkaW #4377
- perf(backtick_code): 简写 @SukkaW #4369
- perf: 避免在 `clean` 命令中运行无关的插件 @curbengh #4386
- 为了与第三方 console 插件保持兼容性,这仅适用于 `hexo clean`,不适用于 `hexo c` 别名。
- perf(titlecase): 延迟加载 @SukkaW #4417
- perf(tag/code): 性能改进 @SukkaW #4416
- perf(post): 简化代码块转义 @SukkaW #4254
- perf(meta_generator): 避免不必要的检查 @SukkaW #4208
- perf(external_link): 缓存配置 @SukkaW #4134
- perf(open_graph): 避免使用 htmlTag() 并增强缓存 @SukkaW #4125
- refactor(list_archives): 减少对 date.format() 的调用 @dailyrandomphoto #4011
- fix(moment.locale): 避免使用错误的名称重复查找 @dailyrandomphoto #4007
修复
- fix(box): 忽略主题文件夹中的 .git 和 node 模块 @jiangtj #4306
- fix: 允许空标题 @stevenjoezhang #4344
- fix(#4236): 当 post_asset_folder 为真时,不要创建“/index”目录 @jiangtj #4258
- fix(#4317): 标签转义使用非贪婪正则表达式 @SukkaW #4358
- fix(post): 使用非贪婪正则表达式 @stevenjoezhang #4161
- fix(post): 正确转义文章中的 swig 标签 @SukkaW #4352
- 现在,单个反引号内的 swig 标签将被解释为代码嵌入。
`{% foo %}{{ bar }}{% endfoo %}`
- fix(logging): 仅在相关命令中记录数据库 @curbengh #4387
Writing database to ${dbPath}/db.json
消息不应该在hexo clean
和hexo version
中显示。
- fix(server-cache): 必须匹配确切的别名 @curbengh #4388
- 提高与第三方控制台插件的兼容性,这些插件的名称可能以字母“s”开头。
- fix(tag-code): 解析 ‘wrap’ 选项 @curbengh #4391
- 用户配置中的
highlight.wrap
选项现在被正确地传递到codeblock
标签插件中。
- 用户配置中的
- fix: 删除未使用的类型检查 @Himself65 #4398
- fix: 直接从错误对象访问错误代码 @SukkaW #4280
- 提高与原生 JS API 的兼容性。
- fix: 使用额外的行 EOF 加载插件 @SukkaW #4256
- fix: 解析反引号中的代码错误 @seaoak #4229
- fix(toc_helper): 转义类名并处理空 id @curbengh #4009
- fix(meta_generator): 匹配现有
<meta>
标签,即使顺序不同 @SukkaW #4017 - fix(excerpt): 更严格的正则表达式 @curbengh #4443
- 现在只有以下 摘要标签 的变体是有效的。
<!--more-->
<!-- more-->
<!--more -->
<!-- more -->
重构
- refactor(meta_generator): 不再忽略空的 @SukkaW #4442
- refactor(external_link): 在加载配置时迁移配置 @SukkaW #4414
- 减少 array#reduce @segayuu #4299
- 使用 createSha1Hash() 与 pipe() 的正确方式 @seaoak #4323
- refactor(post): 减少 Promise @SukkaW #4337
- refactor: 简化代码 @2997ms #4408
- refactor(external_link): 过滤正则表达式 @segayuu #4412
- refactor(hexo): 在生成之前合并主题配置 @SukkaW #4360
- refactor(nunjucks): 专用的 nunjucks 渲染器 @SukkaW #4356
- refactor: 删除 hexo-util#HashStream @SukkaW #4279
- refactor(toc): 避免使用 htmlTag @SukkaW #4183
- refactor(hexo_index): 删除未使用的参数 @curbengh #4153
- Refactor(class): 使用类语法替换原型 @segayuu #4151
- refactor: 使用扩展运算符复制对象 @SukkaW #4140
- refactor: 简化代码 @Himself65 #4138
- refactor: 使用 Object.entries @SukkaW #4118
- refactor: 使用 hexo-util pr-169 @SukkaW #4045
- refactor(hexo/index): 使用 Set @SukkaW #4013
- refactor: 类语法 @SukkaW #4100
- refactor(helper): 微调 @SukkaW #4061
- style: 为 asyncArrow 添加空格 @SukkaW #4102
- 减少流 @segayuu #4333
杂项
- refactor: 将 shell 脚本移植到 JavaScript @Himself65 #4405
- refactor(console/generate): 类和解构赋值 @SukkaW #4338
- 修复不将回调传递给 hexo-fs 的问题 @segayuu #4339
- style: ES6 字符串扩展和解构 @SukkaW #4357
- 将 Travis 和 Appveyor 迁移到 GitHub Actions
- ci(benchmark): 生成火焰图 @SukkaW #4000
- ci(flamegraph): 修复 0x 问题 @SukkaW #4116
- 修复 lgtm.com 发现的错误
- refactor(benchmark): 进行一些细微的调整 @SukkaW #4411
- github(issue_template): 添加特殊说明 @SukkaW #4348
- 添加中文版问题模板
请查看 发布说明 获取完整的更新日志。