Hexo 5.0.0 发布

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` 中的以下行:

package.json
-  "hexo": "^4.2.1",
+ "hexo": "^5.0.0",

重大变更

  • 重构(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)) { %>
  • 重构(box): 移除 Bluebird.asCallback @SukkaW #4379

    • 对于 Box 的回调语法从未在 Hexo 的内部文档中说明过,也从未使用过。
    • 这也提醒您,我们可能会在将来从所有 Hexo API 中删除回调。 #3328
  • 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 @SukkaW #4266

    • Lodash `_` 在 Hexo API 中不再可用。
    // Dropped
    <% const arrayB = _.uniq(arrayA) %>
    • 我们鼓励使用原生 JS API 而不是 Lodash,我们发现 本指南 会很有用。
    • 如果您更喜欢使用 Lodash,您可以随时安装它并通过 Helper API 使其可用。
  • chore/ci: 删除 Node.js 8 并添加 Node.js 14 @SukkaW #4255

  • 重构: 从主题配置中移除站点配置 @SukkaW #4145

    • 以前 `hexo.theme.config` 会合并到 `hexo.config` 中,现在它们已分离,以避免配置中的潜在冲突。

新功能

  • feat(tag): 显示错误源并美化 @SukkaW #4420

  • 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(config): 在处理帖子之前验证配置 @SukkaW #4381

  • 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

  • feat(tag): 添加 unregister() 方法 @SukkaW #4046

    • 这意味着您现在可以注销现有的 标签插件,并用您自己的同名插件替换它。
  • feat(filter): 添加 `_after_html_render` 过滤器 @jiangtj #4051

    • perf(filter): 将 `after_render:html` 设置为 `_after_html_render` 的别名 @curbengh #4073
    • 现有的 `after_render:html` 过滤器插件会自动从这项改进中获益。
  • feat(load_config): 支持 node_modules 中的 theme_dir @SukkaW #4112

  • fix(list_tags): 为每个元素自定义类 @noraj #4059

    • 为每个元素 `<ul>`、`<li>`、`<a>`、`<span>` 自定义类名,用于 list_tags 插件。

性能

修复

  • 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 cleanhexo version 中显示。
  • fix(server-cache): 必须匹配确切的别名 @curbengh #4388
    • 提高与第三方控制台插件的兼容性,这些插件的名称可能以字母“s”开头。
  • fix(tag-code): 解析 ‘wrap’ 选项 @curbengh #4391
  • 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
    1. <!--more-->
    2. <!-- more-->
    3. <!--more -->
    4. <!-- more -->

重构

杂项

请查看 发布说明 获取完整的更新日志。