5.0.0
版本发布时间: 2020-07-29 10:24:16
hexojs/hexo最新发布版本:v7.3.0(2024-07-01 22:41:17)
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]
- Callback syntax for
-
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.
- This can be useful for a theme that prefers to display
-
feat(open_graph): drop 'keywords' option from front-matter @curbengh [#4174]
- Search engines no longer support
keywords
.
- Search engines no longer support
-
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
- Lodash
-
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 intohexo.config
, they are now separated to avoid possible conflict in configuration.
- Previously
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]
- Refer to the API documentation for usage.
- feat: add prism highlight support @SukkaW [#4119]
- Refer to the documentation for usage.
- 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
- Refer to Permalinks for available attributes.
- 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.
- Theme can be configured in a file
- feat(feed_tag): support parsing config.feed @curbengh [#4029]
- Better integration with hexo-generator-feed.
- 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.
- perf(filter): set
- 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.
- Customize the class name for each element
Performance
- perf(tag): rendering optimization @SukkaW [#4418]
- perf(external_link): faster regexp & condition shorthand @SukkaW [#4436]
- perf(external_link): optimize regex @SukkaW [#4008]
- perf(filter): shorthand syntax @SukkaW [#4377]
- perf(backtick_code): shorthand @SukkaW [#4369]
- perf: avoid running irrelevant plugins in 'clean' command @curbengh [#4386]
- To maintain compatibility with third-party console plugins, this only applies to
hexo clean
, nothexo c
alias.
- To maintain compatibility with third-party console plugins, this only applies to
- perf(titlecase): lazy require @SukkaW [#4417]
- perf(tag/code): performance improvements @SukkaW [#4416]
- perf(post): simplify codeblock escape @SukkaW [#4254]
- perf(meta_generator): avoid unnecessary check @SukkaW [#4208]
- perf(external_link): cache config @SukkaW [#4134]
- perf(open_graph): avoid using htmlTag() and enhance cache @SukkaW [#4125]
- refactor(list_archives): reduce calls to date.format() @dailyrandomphoto [#4011]
- fix(moment.locale): avoid lookup repeatedly with the wrong names @dailyrandomphoto [#4007]
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 inhexo clean
andhexo 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]
-
highlight.wrap
option in user config is now properly passed to thecodeblock
tag plugin
-
- 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.
-
<!--more-->
-
<!-- more-->
-
<!--more -->
-
<!-- more -->
Refactor
- refactor(meta_generator): no longer ignore empty @SukkaW [#4442]
- refactor(external_link): migrate config during load_config @SukkaW [#4414]
- Reduce array#reduce @segayuu [#4299]
- Correct using createSha1Hash() with pipe() @seaoak [#4323]
- refactor(post): reduce promise @SukkaW [#4337]
- refactor: simplify code @2997ms [#4408]
- refactor(external_link): filter regexp @segayuu [#4412]
- refactor(hexo): merge theme_config before generation @SukkaW [#4360]
- refactor(nunjucks): dedicated nunjucks renderer @SukkaW [#4356]
- refactor: drop hexo-util#HashStream @SukkaW [#4279]
- refactor(toc): avoid using htmlTag @SukkaW [#4183]
- refactor(hexo_index): remove unused parameter @curbengh [#4153]
- Refactor(class): Replace prototype to class syntax @segayuu [#4151]
- refactor: copy object with spread operator @SukkaW [#4140]
- refactor: simplify code @Himself65 [#4138]
- refactor: utilize Object.entries @SukkaW [#4118]
- refactor: utilize hexo-util pr-169 @SukkaW [#4045]
- refactor(hexo/index): use Set @SukkaW [#4013]
- refactor: Class syntax @SukkaW [#4100]
- refactor(helper): minor changes @SukkaW [#4061]
- style: space for asyncArrow @SukkaW [#4102]
- Reduce stream @segayuu [#4333]
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
- refactor: port shell script to javascript @Himself65 [#4405]
- refactor(console/generate): class & destructure assign @SukkaW [#4338]
- Fix not to pass callback to hexo-fs @segayuu [#4339]
- style: es6 string extensions & destructure @SukkaW [#4357]
- Migrate Travis and Appveyor tp GitHub Actions
- ci(appveyor): drop appveyor @SukkaW [#4402]
- chore: add release release-drafter (#3858) @YoshinoriN [#4165]
- ci: add GitHub Actions to run linter @Himself65 [#4143]
- ci(travis): remove Windows @curbengh [#4076]
- ci(github_actions): Create tester job @segayuu [#4169]
- Move coveralls from travis to github actions @segayuu [#4326]
- ci(benchmark): generate flamegraph @SukkaW [#4000]
- ci(flamegraph): fix 0x @SukkaW [#4116]
- Fix issues found by lgtm.com
- fix(console_generate): remove unnecessary boolean-to-object conversion @curbengh [#4152]
- fix: remove useless conditions @curbengh [#4147]
- fix: return callback if called @curbengh [#4178]
- refactor(benchmark): minor changes @SukkaW [#4411]
- github(issue_template): add special notice @SukkaW [#4348]
- add mandarin issue template
Test
- test(benchmark): optimize for local & render post support @SukkaW [#4428]
- perf(mocha): run tests in parallel @curbengh [#4374]
- refactor(test): async hexo/load_config.js @segayuu [#4340]
- test(#4087): add related cases @SukkaW [#4364]
- test(post): add test cases for [#3543] & [#3459] @SukkaW [#4361]
- test(generate): add a small delay before clean up @SukkaW [#4393]
- test(#4385): no double escape in code block @SukkaW [#4395]
- test(generate): add a longer delay after fs#unlink @SukkaW [#4400]
- test: coverage improvements @SukkaW [#4270] [#4421] [#4422]
- test(box): fix test cases for macOS @stevenjoezhang [#4269]
- test(load_plugins): make sure file is created @SukkaW [#4265]
- test(post): adding extra test cases @SukkaW [#4238]
- test(load_plugins): minor changes @SukkaW [#4212]
- test(post): fix cases added in #4161 @SukkaW [#4162]
- test(tags-plugins/helper): improve test coverage @SukkaW [#4014]
- style(test-helper-is): asyncArrow space @SukkaW [#4015]
- test: improve coverage @SukkaW [#4050]
- test(load-database): fix EPERM error in windows @curbengh [#4069]
- test: useful sinon.assert @segayuu [#4164]
- test: replace from rewire to sinon.stub() @segayuu [#4157]
- refactor test @segayuu [#4115]
- simplify unit test