Hexo 5.0.0 リリース

Hexo は、Node.js をベースとした静的サイトジェネレーターです。強力な API を提供し、既存の npm パッケージをWeb開発に統合したり、記事に特定のコンテンツをプログラム的に挿入したりできます。

これはこれまでで最大のリリースであり、多くの新機能、パフォーマンスの向上、バグ修正が含まれています。 私たちのベンチマーク(回帰を検出するためにすべてのプルリクエストで実行)によると、Hexo 5 は500件の投稿を 16秒 で処理しましたが、 4.2.0 では同じ時間で300件の投稿を処理していました。 Hexo は Node.js 10 以上を必要とします。Node.js は2019年12月31日以降、バージョン8のサポートを終了しました。Node.js 10.x はまだサポートされていますが、1年以内に廃止予定(2021年4月)であるため、Node.js 12 以上を使用することをお勧めします。

Hexo をインストールするには、インストールガイド を参照してください。

Hexo v5 にアップグレードするには、`package.json` の次の行を変更してください。

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

破壊的変更

  • refactor(external_link): `load_config` 中に設定値を移行 @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.dokyumento.jp/docs/configuration#Date-Time-format
    updated_option: date
    • 自動的にオブジェクトに変換されるため、 truthy 値に対して `external_link` をチェックする場合、常に truthy になります。
    <% if (config.external_link) { %>
    • 以前のバージョンとの下位互換性を維持したい場合
    <% if ((typeof config.external_link === 'boolean' && config.external_link === true) || (typeof config.external_link === 'object' && config.external_link.enable === true)) { %>
  • refactor(box): Bluebird.asCallback を削除 @SukkaW #4379

    • Box のコールバック構文は、ドキュメント化されておらず、Hexo の内部でも使用されていません。
    • これは、将来すべての Hexo API からコールバックを削除する可能性があることを示唆しています。#3328
  • feat: config.updated_option を追加 @SukkaW #4278

    • これは、記事のフロントマターに設定されている場合にのみ「更新日:」を表示したいテーマに役立ちます。
  • 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) %>
    • lodash よりもネイティブの JS API の使用を推奨します。 このガイド が役立つと思います。
    • lodash を使用したい場合は、いつでもインストールして Helper API を介して使用できるようにすることができます。
  • chore/ci: Node.js 8 を削除し、Node.js 14 を追加 @SukkaW #4255

  • refactor: テーマ設定からサイト設定を削除 @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

  • 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

    • 無効にすると、YouTube 動画の埋め込みに cookie が設定/送信されません。
  • feat(youtube_tag): プレイリストをサポート @SukkaW #4139

    • プレイリストを埋め込む機能。
  • feat(load_theme_config): 代替テーマ設定をサポート @SukkaW #4120

    • テーマは `_config.[name].yml` ファイル(例: hexo-theme-landscape の場合は `_config.landscape.yml`)で設定できます。
    • 現在の `_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

    • list_tags プラグインの各要素 `<ul>`、`<li>`、`<a>`、`<span>` のクラス名をカスタマイズします。

パフォーマンス

  • 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
    • サードパーティ製コンソールプラグインとの互換性を維持するため、これは`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_modulesを無視 @jiangtj #4306
  • fix: 空のタイトルを許可 @stevenjoezhang #4344
  • fix(#4236): post_asset_folder がtrueの場合、「/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を使用した`load_plugin` @SukkaW #4256
  • fix: バッククォート内のコード解析エラー @seaoak #4229
  • fix(toc_helper): クラス名をエスケープし、null IDを処理 @curbengh #4009
  • fix(meta_generator): 順序の異なる既存の`<meta>`に一致 @SukkaW #4017
  • fix(excerpt): より厳格な正規表現 @curbengh #4443
    • 現在、抜粋タグ の以下のバリアントのみが有効です。
    1. <!--more-->
    2. <!-- more-->
    3. <!--more -->
    4. <!-- more -->

リファクタリング

その他

  • refactor: シェルスクリプトをJavaScriptに移植 @Himself65 #4405
  • refactor(console/generate): クラスとデストラクチャリング代入 @SukkaW #4338
  • hexo-fsにコールバックを渡さないように修正 @segayuu #4339
  • style: ES6文字列拡張とデストラクチャリング @SukkaW #4357
  • TravisとAppveyorをGitHub Actionsに移行
  • ci(benchmark): flamegraph生成 @SukkaW #4000
  • ci(flamegraph): 0xの修正 @SukkaW #4116
  • lgtm.comで発見された問題の修正
    • fix(console_generate): 不要なブール値からオブジェクトへの変換を削除 @curbengh #4152
    • fix: 不要な条件を削除 @curbengh #4147
    • fix: 呼び出された場合にコールバックを返す @curbengh #4178
  • refactor(benchmark): マイナーな変更 @SukkaW #4411
  • github(issue_template): 特殊な通知を追加 @SukkaW #4348
    • 中国語のissueテンプレートを追加

完全な変更ログについては、リリースノートを参照してください。