Skip to content

5.0.0

Compare
Choose a tag to compare
@release-drafter release-drafter released this 29 Jul 02:24
· 286 commits to master since this release
1489074

Breaking change

  • refactor(external_link): migrate config during load_config @SukkaW [#4414] [#4371]

    • See Writing section for new options (introduced back in v4)
    # _config.yml
    external_link: true|false # deprecated
    
    # New option
    external_link:
      enable: true|false
    # _config.yml
    # https://hexo.io/docs/configuration#Date-Time-format
    use_date_for_updated: true # deprecated
    
    # New option
    updated_option: date
    • If you check external_link for truthy value, since it's now automatically converted to object, it will be always truthy:
    <% if (config.external_link) { %>
    • If you wish to maintain backward compatibility with older Hexo versions:
    <% if ((typeof config.external_link === 'boolean' && config.external_link === true) || (typeof config.external_link === 'object' && config.external_link.enable === true)) { %>
  • refactor(box): remove Bluebird.asCallback @SukkaW [#4379]

    • Callback syntax for Box is never documented nor utilized in Hexo's internal.
    • This is also a reminder that we might drop callbacks from all Hexo API in future. [#3328]
  • feat: bring up config.updated_option @SukkaW [#4278]

    • This can be useful for a theme that prefers to display Updated: only when it's set in the article's front-matter.
  • feat(open_graph): drop 'keywords' option from front-matter @curbengh [#4174]

    • Search engines no longer support keywords.
  • fix(#3464): override permalink use the front-matter @SukkaW [#4359]

    • User config:
    # _config.yml
    permalink: :year/:month/:day/:title/
    • Front-matter
    ---
    title: foo bar
    permalink: breaking-news/
    ---
    • That post will be available on http://yourhexo.com/breaking-news/
    • A reminder that permalink must have a trailing .html or /
    permalink: :year/:month/:day/:title/ # default
    # or
    permalink: :year/:month/:day/:title.html
  • Remove lodash from global variable @SukkaW [#4266]

    • Lodash _ is no longer available on Hexo API.
    // Dropped
    <% const arrayB = _.uniq(arrayA) %>
    • We encourage the use over native JS API over Lodash, we find this guide to be helpful.
    • If you prefer to use Lodash, you can always install it and make it available via Helper API
  • chore/ci: drop Node.js 8 and add Node.js 14 @SukkaW [#4255]

    • Node 8 has reached EOL on 31 Dec 2019.
    • Hexo now requires Node 10+; although Node 10.x is still supported, but it's going to be officially deprecated in less than a year (April 2021), so we recommend Node 12+.
  • refactor: remove site config from theme config @SukkaW [#4145]

    • Previously hexo.theme.config is merged into hexo.config, they are now separated to avoid possible conflict in configuration.

New feature

  • feat(tag): show source of the error & beautify @SukkaW [#4420]
  • feat(post_link): better error message when a post could not be located [#4426]
    • The error message is now clearer when there is an incorrect filename.
  • skip assets of unpublished posts and delete them if exist @DaemondShu [#3489]
    • When there is an unpublished post:
    ---
    title: Still a draft....
    published: false
    ---
    • That post including its assets will not be generated into the public/ folder.
  • feat(extend/injector): bring up new extend Injector @SukkaW [#4049]
  • feat: add prism highlight support @SukkaW [#4119]
  • feat(tagcloud): new option class & level @stevenjoezhang [#4370]
    • Ability to add class name for CSS styling.
  • feat(config): validate config before processing posts @SukkaW [#4381]
  • feat(post_permalink): add :second attribute option for post permalink @kkocdko [#4185]
    • Example:
    permalink: :year/:month/:day/:hour/:minute/:second/:title.html
  • feat(youtube_tag): add cookie option @curbengh [#4155]
    • When disabled, cookie is not set/sent in the youtube video embed.
  • feat(youtube_tag): support playlist @SukkaW [#4139]
    • Ability to embed a playlist.
  • feat(load_theme_config): support alternate theme config @SukkaW [#4120]
    • Theme can be configured in a file _config.[name].yml, e.g. _config.landscape.yml for hexo-theme-landscape.
    • Placed the file in the root folder, same as the current _config.yml.
    • Refer to the documentation for configuration priority.
  • feat(feed_tag): support parsing config.feed @curbengh [#4029]
  • feat(tag): add unregister() method @SukkaW [#4046]
    • This means you can now unregister existing tag plugins and replace it with your own with the same name.
  • feat(filter): add _after_html_render filter @jiangtj [#4051]
    • perf(filter): set after_render:html as alias of _after_html_render @curbengh [#4073]
    • Existing after_render:html filter plugins automatically benefit from this improvement.
  • feat(load_config): support theme_dir in node_modules @SukkaW [#4112]
  • fix(list_tags): custom class for each element @noraj [#4059]
    • Customize the class name for each element <ul>, <li>, <a>, <span> for list_tags plugin.

Performance

Fix

  • fix(box): ignore .git and node modules in the theme folder @jiangtj [#4306]
  • fix: allow empty title @stevenjoezhang [#4344]
  • fix(#4236): don't create "/index" directories when post_asset_folder is true @jiangtj [#4258]
  • fix(#4317): non-greedy regexp for tag escape @SukkaW [#4358]
  • fix(post): use non-greedy regular expressions @stevenjoezhang [#4161]
  • fix(post): properly escape swig tag inside post @SukkaW [#4352]
    • swig tag inside a single backtick is now interpreted as code embed.
    • `{% foo %}{{ bar }}{% endfoo %}`
  • fix(logging): log database only in relevant commands @curbengh [#4387]
    • Writing database to ${dbPath}/db.json message shouldn't show up in hexo clean and hexo version.
  • fix(server-cache): must match exact alias @curbengh [#4388]
    • Improve compatibility with 3rd-party console plugins that may have a name that starts with an 's'.
  • fix(tag-code): parse 'wrap' option @curbengh [#4391]
  • fix: remove unused type check @himself65 [#4398]
  • fix: access error code from error object directly @SukkaW [#4280]
    • Improve compatibility with native JS API
  • fix: load_plugin with extra line EOF @SukkaW [#4256]
  • fix: parsing code error in backticks @seaoak [#4229]
  • fix(toc_helper): escape class name and handle null id @curbengh [#4009]
  • fix(meta_generator): match existing <meta> with different order @SukkaW [#4017]
  • fix(excerpt): stricter regex @curbengh [#4443]
    • Now only the following variants of excerpt tag are valid.
    1. <!--more-->
    2. <!-- more-->
    3. <!--more -->
    4. <!-- more -->

Refactor

Dependencies

  • chore(deps): update hexo-front-matter from 1.0.0 to 2.0.0 @SukkaW [#4439]
  • chore(deps): update hexo-util from 1.9.0 to 2.2.0 [#4276] [#4438]
  • chore(deps): bump hexo-log from 1.0.0 to 2.0.0 [#4392]
  • chore(deps-dev): bump hexo-renderer-marked from 2.0.0 to 3.0.0 [#4390]
  • chore(deps-dev): bump mocha from 6.2.2 to 8.0.1 [#4060] [#4354]
  • Update tester node version @segayuu [#4324]
  • chore(deps-dev): bump eslint from 6.8.0 to 7.0.0 [#4301]
  • chore(deps): bump warehouse from 3.0.1 to 4.0.0 [#4077] [#4322]
  • chore(deps-dev): bump lint-staged from 9.5.0 to 10.2.0 [#4283]
  • chore(deps): bump hexo-fs from 2.0.0 to 3.0.1 [#4277]
  • chore(deps-dev): bump sinon from 7.5.0 to 9.0.2 [#4005] [#4232]
  • chore(deps-dev): bump husky from 3.1.0 to 4.2.5 [#4235]
  • chore(deps): bump chalk from 3.0.0 to 4.0.0 [#4215]
  • chore(deps-dev): bump nyc from 14.1.1 to 15.0.0 [#4003]

Misc

Test